1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*
2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Copyright 2003-2010, VisualOn, Inc.
3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard **
4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Licensed under the Apache License, Version 2.0 (the "License");
5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** you may not use this file except in compliance with the License.
6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** You may obtain a copy of the License at
7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard **
8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard **     http://www.apache.org/licenses/LICENSE-2.0
9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard **
10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Unless required by applicable law or agreed to in writing, software
11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** distributed under the License is distributed on an "AS IS" BASIS,
12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** See the License for the specific language governing permissions and
14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** limitations under the License.
15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard */
16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*******************************************************************************
17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	File:		basicop2.c
18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
19b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	Content:	Basic arithmetic operators.
20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
21956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong*******************************************************************************/
22956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
23956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#include "typedef.h"
24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include "basic_op.h"
25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Functions                                                               |
30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
31e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
32e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
35e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : saturate                                                |
36e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
37e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
39e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    Limit the 32 bit input to the range of a 16 bit word.                  |
40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var1                                                                 |
44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
45e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |
46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
47e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
48e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
49e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
54e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!SATRUATE_IS_INLINE)
60e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 saturate(Word32 L_var1)
61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
62e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (L_var1 > 0X00007fffL)
65e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
66e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = MAX_16;
67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
68e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else if (L_var1 < (Word32) 0xffff8000L)
69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = MIN_16;
71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
74e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = extract_l(L_var1);
75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
77e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
79e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
81e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
83e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : add                                                     |
84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    Performs the addition (var1+var2) with overflow control and saturation;|
88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    the 16 bit result is set at +32767 when overflow occurs or at -32768   |
89e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    when underflow occurs.                                                 |
90e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
91e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 1                                                   |
92e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
93e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
94e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
96e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
99e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
102e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
108e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
110e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
111e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
113e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
114e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
115e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!ADD_IS_INLINE)
116e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 add (Word16 var1, Word16 var2)
117e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
118e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
119e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_sum;
120e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
121e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_sum = (Word32)var1 + (Word32)var2;
122e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = saturate(L_sum);
123e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
124e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
125e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
126e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
127e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
128e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
129e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
130e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : sub                                                     |
131e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
132e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
133e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
134e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    Performs the subtraction (var1+var2) with overflow control and satu-   |
135e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    ration; the 16 bit result is set at +32767 when overflow occurs or at  |
136e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    -32768 when underflow occurs.                                          |
137e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
138e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 1                                                   |
139e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
140e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
141e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
142e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
143e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
144e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
145e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
146e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
147e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
148e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
149e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
150e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
151e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
152e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
153e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
154e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
155e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
156e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
157e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
158e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
159e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
160e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
161e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!SUB_IS_INLINE)
162e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 sub(Word16 var1, Word16 var2)
163e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
164e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
165e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_diff;
166e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
167e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_diff = (Word32) var1 - var2;
168e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = saturate(L_diff);
169e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
170e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
171e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
172e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
173e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
174e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
175e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
176e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : abs_s                                                   |
177e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
178e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
179e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
180e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    Absolute value of var1; abs_s(-32768) = 32767.                         |
181e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
182e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 1                                                   |
183e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
184e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
185e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
186e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
187e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
188e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
189e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
190e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
191e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
192e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
193e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
194e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
195e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
196e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
197e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
198e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x0000 0000 <= var_out <= 0x0000 7fff.                |
199e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
200e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
201e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//Word16 abs_s (Word16 var1)
202e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//{
203e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    Word16 var_out;
204e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//
205e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    if (var1 == MIN_16)
206e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    {
207e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//        var_out = MAX_16;
208e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    }
209e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    else
210e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    {
211e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//        if (var1 < 0)
212e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//        {
213e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//            var_out = (Word16)-var1;
214e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//        }
215e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//        else
216e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//        {
217e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//            var_out = var1;
218e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//        }
219e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    }
220e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//
221e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    return (var_out);
222e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//}
223e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
224e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
225e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
226e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
227e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : shl                                                     |
228e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
229e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
230e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
231e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Arithmetically shift the 16 bit input var1 left var2 positions.Zero fill|
232e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   the var2 LSB of the result. If var2 is negative, arithmetically shift   |
233e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   var1 right by -var2 with sign extension. Saturate the result in case of |
234e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   underflows or overflows.                                                |
235e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
236e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 1                                                   |
237e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
238e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
239e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
240e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
241e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
242e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
243e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
244e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
245e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
246e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
247e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
248e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
249e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
250e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
251e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
252e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
253e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
254e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
255e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
256e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
257e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
258e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
259e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
260e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!SHL_IS_INLINE)
261e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 shl (Word16 var1, Word16 var2)
262e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
263e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
264e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 result;
265e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
266e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var2 < 0)
267e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
268e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (var2 < -16)
269e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            var2 = -16;
270e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = shr (var1, (Word16)-var2);
271e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
272e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
273e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
274e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        result = (Word32) var1 *((Word32) 1 << var2);
275e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
276e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if ((var2 > 15 && var1 != 0) || (result != (Word32) ((Word16) result)))
277e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
278e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            //Overflow = 1;
279e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            var_out = (Word16)((var1 > 0) ? MAX_16 : MIN_16);
280e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
281e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else
282e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
283e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            var_out = extract_l(result);
284e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
285e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
286e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
287e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
288e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
289e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
290e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard// end
291e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
292e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
293e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
294e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : shr                                                     |
295e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
296e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
297e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
298e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Arithmetically shift the 16 bit input var1 right var2 positions with    |
299e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   sign extension. If var2 is negative, arithmetically shift var1 left by  |
300e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   -var2 with sign extension. Saturate the result in case of underflows or |
301e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   overflows.                                                              |
302e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
303e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 1                                                   |
304e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
305e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
306e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
307e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
308e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
309e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
310e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
311e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
312e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
313e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
314e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
315e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
316e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
317e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
318e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
319e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
320e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
321e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
322e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
323e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
324e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
325e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
326e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
327e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!SHR_IS_INLINE)
328e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 shr (Word16 var1, Word16 var2)
329e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
330e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
331e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
332e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var2 < 0)
333e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
334e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (var2 < -16)
335e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            var2 = -16;
336e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = shl (var1, (Word16)-var2);
337e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
338e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
339e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
340e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (var2 >= 15)
341e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
342e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            var_out = (Word16)((var1 < 0) ? -1 : 0);
343e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
344e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else
345e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
346e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            if (var1 < 0)
347e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
348e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                var_out = (Word16)(~((~var1) >> var2));
349e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
350e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            else
351e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
352e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                var_out = (Word16)(var1 >> var2);
353e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
354e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
355e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
356e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
357e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
358e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
359e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
360e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
361e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
362e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
363e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
364e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : mult                                                    |
365e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
366e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
367e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
368e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    Performs the multiplication of var1 by var2 and gives a 16 bit result  |
369e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    which is scaled i.e.:                                                  |
370e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             mult(var1,var2) = extract_l(L_shr((var1 times var2),15)) and  |
371e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             mult(-32768,-32768) = 32767.                                  |
372e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
373e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 1                                                   |
374e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
375e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
376e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
377e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
378e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
379e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
380e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
381e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
382e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
383e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
384e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
385e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
386e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
387e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
388e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
389e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
390e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
391e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
392e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
393e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
394e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
395e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
396e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!MULT_IS_INLINE)
397e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 mult (Word16 var1, Word16 var2)
398e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
399e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
400e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_product;
401e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
402e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product = (Word32) var1 *(Word32) var2;
403e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
404e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product = (L_product & (Word32) 0xffff8000L) >> 15;
405e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
406e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (L_product & (Word32) 0x00010000L)
407e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_product = L_product | (Word32) 0xffff0000L;
408e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
409e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = saturate(L_product);
410e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
411e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
412e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
413e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
414e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
415e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
416e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
417e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : L_mult                                                  |
418e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
419e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
420e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
421e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   L_mult is the 32 bit result of the multiplication of var1 times var2    |
422e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   with one shift left i.e.:                                               |
423e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |        L_mult(var1,var2) = L_shl((var1 times var2),1) and                 |
424e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |        L_mult(-32768,-32768) = 2147483647.                                |
425e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
426e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 1                                                   |
427e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
428e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
429e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
430e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
431e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
432e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
433e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
434e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
435e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
436e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
437e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
438e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
439e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
440e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
441e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
442e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
443e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
444e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var_out                                                              |
445e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
446e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
447e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
448e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
449e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
450e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!L_MULT_IS_INLINE)
451e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_mult(Word16 var1, Word16 var2)
452e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
453e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out;
454e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
455e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var_out = (Word32) var1 *(Word32) var2;
456e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
457e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (L_var_out != (Word32) 0x40000000L)
458e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
459e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_var_out <<= 1;
460e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
461e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
462e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
463e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_var_out = MAX_32;
464e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
465b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
466e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var_out);
467e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
468e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
469e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard// end
470e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
471e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
472e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
473e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : negate                                                  |
474e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
475e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
476e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
477e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Negate var1 with saturation, saturate in the case where input is -32768:|
478e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                negate(var1) = sub(0,var1).                                |
479e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
480e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 1                                                   |
481e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
482e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
483e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
484e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
485e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
486e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
487e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
488e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
489e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
490e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
491e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
492e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
493e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
494e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
495e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
496e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
497e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
498e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
499e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//Word16 negate (Word16 var1)
500e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//{
501e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    Word16 var_out;
502e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//
503e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    var_out = (Word16)((var1 == MIN_16) ? MAX_16 : -var1);
504e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//
505e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    return (var_out);
506e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//}
507e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
508e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
509e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
510e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
511e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : extract_h                                               |
512e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
513e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
514e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
515e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return the 16 MSB of L_var1.                                            |
516e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
517e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 1                                                   |
518e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
519e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
520e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
521e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var1                                                                 |
522e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32 ) whose value falls in the |
523e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |
524e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
525e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
526e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
527e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
528e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
529e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
530e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
531e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
532e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
533e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
534e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
535e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
536e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!EXTRACT_H_IS_INLINE)
537e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 extract_h (Word32 L_var1)
538e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
539e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
540e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
541e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = (Word16) (L_var1 >> 16);
542e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
543e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
544e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
545e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
546e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
547e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
548e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
549e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : extract_l                                               |
550e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
551e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
552e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
553e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return the 16 LSB of L_var1.                                            |
554e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
555e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 1                                                   |
556e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
557e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
558e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
559e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var1                                                                 |
560e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32 ) whose value falls in the |
561e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |
562e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
563e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
564e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
565e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
566e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
567e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
568e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
569e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
570e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
571e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
572e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
573e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
574e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!EXTRACT_L_IS_INLINE)
575e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 extract_l(Word32 L_var1)
576e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
577e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
578e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
579e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = (Word16) L_var1;
580e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
581e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
582e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
583e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
584e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
585e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
586e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
587e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : round                                                   |
588e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
589e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
590e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
591e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Round the lower 16 bits of the 32 bit input number into the MS 16 bits  |
592e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   with saturation. Shift the resulting bits right by 16 and return the 16 |
593e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   bit number:                                                             |
594e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |               round(L_var1) = extract_h(L_add(L_var1,32768))              |
595e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
596e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 1                                                   |
597e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
598e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
599e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
600e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var1                                                                 |
601e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32 ) whose value falls in the |
602e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |
603e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
604e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
605e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
606e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
607e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
608e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
609e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
610e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
611e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
612e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
613e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
614e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
615e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
616e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!ROUND_IS_INLINE)
617e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 round16(Word32 L_var1)
618e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
619e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
620e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_rounded;
621e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
622e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_rounded = L_add (L_var1, (Word32) 0x00008000L);
623e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = extract_h (L_rounded);
624e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
625e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
626e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
627e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
628e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard// end
629e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
630e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
631e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
632e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : L_mac                                                   |
633e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
634e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
635e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
636e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Multiply var1 by var2 and shift the result left by 1. Add the 32 bit    |
637e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   result to L_var3 with saturation, return a 32 bit result:               |
638e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |        L_mac(L_var3,var1,var2) = L_add(L_var3,L_mult(var1,var2)).         |
639e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
640e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 1                                                   |
641e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
642e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
643e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
644e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var3   32 bit long signed integer (Word32) whose value falls in the  |
645e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
646e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
647e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
648e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
649e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
650e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
651e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
652e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
653e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
654e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
655e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
656e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
657e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
658e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
659e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
660e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
661e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var_out                                                              |
662e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
663e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
664e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
665e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
666e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!L_MSU_IS_INLINE)
667e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_mac (Word32 L_var3, Word16 var1, Word16 var2)
668e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
669e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out;
670e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_product;
671e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
672e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product = L_mult(var1, var2);
673e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var_out = L_add (L_var3, L_product);
674e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
675e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var_out);
676e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
677e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
678e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
679e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
680e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
681e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : L_msu                                                   |
682e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
683e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
684e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
685e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Multiply var1 by var2 and shift the result left by 1. Subtract the 32   |
686e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   bit result to L_var3 with saturation, return a 32 bit result:           |
687e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |        L_msu(L_var3,var1,var2) = L_sub(L_var3,L_mult(var1,var2)).         |
688e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
689e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 1                                                   |
690e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
691e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
692e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
693e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var3   32 bit long signed integer (Word32) whose value falls in the  |
694e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
695e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
696e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
697e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
698e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
699e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
700e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
701e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
702e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
703e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
704e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
705e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
706e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
707e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
708e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
709e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
710e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var_out                                                              |
711e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
712e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
713e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
714e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
715e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
716e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!L_MSU_IS_INLINE)
717e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_msu (Word32 L_var3, Word16 var1, Word16 var2)
718e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
719e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out;
720e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_product;
721e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
722e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product = L_mult(var1, var2);
723e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var_out = L_sub (L_var3, L_product);
724e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
725e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var_out);
726e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
727e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
728e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
729e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
730e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
731e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
732e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : L_add                                                   |
733e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
734e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
735e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
736e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   32 bits addition of the two 32 bits variables (L_var1+L_var2) with      |
737e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   overflow control and saturation; the result is set at +2147483647 when  |
738e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   overflow occurs or at -2147483648 when underflow occurs.                |
739e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
740e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 2                                                   |
741e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
742e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
743e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
744e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
745e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
746e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
747e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var2   32 bit long signed integer (Word32) whose value falls in the  |
748e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
749e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
750e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
751e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
752e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
753e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
754e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
755e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
756e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var_out                                                              |
757e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
758e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
759e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
760e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
761e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!L_ADD_IS_INLINE)
762e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_add (Word32 L_var1, Word32 L_var2)
763e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
764e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out;
765e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
766e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var_out = L_var1 + L_var2;
767e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
768e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (((L_var1 ^ L_var2) & MIN_32) == 0)
769e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
770e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if ((L_var_out ^ L_var1) & MIN_32)
771e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
772e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            L_var_out = (L_var1 < 0) ? MIN_32 : MAX_32;
773e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            //Overflow = 1;
774e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
775e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
776e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
777e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var_out);
778e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
779e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
780e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
781e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
782e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
783e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : L_sub                                                   |
784e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
785e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
786e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
787e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   32 bits subtraction of the two 32 bits variables (L_var1-L_var2) with   |
788e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   overflow control and saturation; the result is set at +2147483647 when  |
789e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   overflow occurs or at -2147483648 when underflow occurs.                |
790e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
791e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 2                                                   |
792e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
793e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
794e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
795e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
796e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
797e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
798e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var2   32 bit long signed integer (Word32) whose value falls in the  |
799e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
800e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
801e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
802e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
803e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
804e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
805e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
806e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
807e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var_out                                                              |
808e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
809e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
810e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
811e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
812e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!L_SUB_IS_INLINE)
813e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_sub(Word32 L_var1, Word32 L_var2)
814e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
815e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out;
816e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
817e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var_out = L_var1 - L_var2;
818e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
819e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (((L_var1 ^ L_var2) & MIN_32) != 0)
820e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
821e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if ((L_var_out ^ L_var1) & MIN_32)
822e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
823e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            L_var_out = (L_var1 < 0L) ? MIN_32 : MAX_32;
824e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            //Overflow = 1;
825e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
826e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
827e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
828e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var_out);
829e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
830e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
831e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
832e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
833e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
834e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
835e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : L_negate                                                |
836e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
837e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
838e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
839e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Negate the 32 bit variable L_var1 with saturation; saturate in the case |
840e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   where input is -2147483648 (0x8000 0000).                               |
841e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
842e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 2                                                   |
843e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
844e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
845e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
846e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
847e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
848e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
849e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
850e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
851e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
852e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
853e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
854e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
855e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var_out                                                              |
856e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
857e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
858e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
859e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
860e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//Word32 L_negate (Word32 L_var1)
861e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//{
862e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    Word32 L_var_out;
863e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//
864e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    L_var_out = (L_var1 == MIN_32) ? MAX_32 : -L_var1;
865e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//
866e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    return (L_var_out);
867e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//}
868e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
869e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
870e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
871e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
872e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : mult_r                                                  |
873e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
874e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
875e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
876e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Same as mult with rounding, i.e.:                                       |
877e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |     mult_r(var1,var2) = extract_l(L_shr(((var1 * var2) + 16384),15)) and  |
878e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |     mult_r(-32768,-32768) = 32767.                                        |
879e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
880e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 2                                                   |
881e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
882e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
883e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
884e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
885e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
886e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
887e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
888e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
889e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
890e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
891e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
892e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
893e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
894e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
895e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
896e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
897e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
898e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
899e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
900e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
901e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
902e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
903e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!MULT_R_IS_INLINE)
904e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 mult_r (Word16 var1, Word16 var2)
905e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
906e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
907e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_product_arr;
908e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
909e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product_arr = (Word32) var1 *(Word32) var2;       /* product */
910e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product_arr += (Word32) 0x00004000L;      /* round */
911e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product_arr &= (Word32) 0xffff8000L;
912e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product_arr >>= 15;       /* shift */
913e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
914e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (L_product_arr & (Word32) 0x00010000L)   /* sign extend when necessary */
915e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
916e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_product_arr |= (Word32) 0xffff0000L;
917e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
918e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = saturate(L_product_arr);
919e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
920e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
921e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
922e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
923e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
924e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
925e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
926e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : L_shl                                                   |
927e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
928e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
929e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
930e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Arithmetically shift the 32 bit input L_var1 left var2 positions. Zero  |
931e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   fill the var2 LSB of the result. If var2 is negative, arithmetically    |
932e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   shift L_var1 right by -var2 with sign extension. Saturate the result in |
933e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   case of underflows or overflows.                                        |
934e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
935e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 2                                                   |
936e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
937e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
938e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
939e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
940e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
941e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
942e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
943e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
944e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
945e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
946e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
947e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
948e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
949e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
950e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
951e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
952e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var_out                                                              |
953e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
954e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
955e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
956e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
957e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
958e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!L_SHL_IS_INLINE)
959e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_shl (Word32 L_var1, Word16 var2)
960e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
961e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out = 0L;
962e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
963e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var2 <= 0)
964e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
965e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_var1 = L_shr(L_var1, (Word16)-var2);
966e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
967e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
968e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
969e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        for (; var2 > 0; var2--)
970e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
971e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            if (L_var1 > (Word32) 0X3fffffffL)
972e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
973e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                return MAX_32;
974e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
975e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            else
976e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
977e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                if (L_var1 < (Word32) 0xc0000000L)
978e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                {
979e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                    return MIN_32;
980e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                }
981e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
982e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            L_var1 <<= 1;
983e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
984e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
985e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var1);
986e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
987e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
988e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
989e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
990e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
991e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : L_shr                                                   |
992e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
993e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
994e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
995e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Arithmetically shift the 32 bit input L_var1 right var2 positions with  |
996e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   sign extension. If var2 is negative, arithmetically shift L_var1 left   |
997e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   by -var2 and zero fill the -var2 LSB of the result. Saturate the result |
998e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   in case of underflows or overflows.                                     |
999e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1000e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 2                                                   |
1001e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1002e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
1003e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1004e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
1005e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
1006e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1007e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
1008e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1009e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
1010e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1011e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
1012e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1013e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
1014e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1015e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
1016e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1017e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var_out                                                              |
1018e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
1019e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
1020e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
1021e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
1022e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1023e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!L_SHR_IS_INLINE)
1024e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_shr (Word32 L_var1, Word16 var2)
1025e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1026e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out;
1027e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1028e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var2 < 0)
1029e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1030e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_var_out = L_shl (L_var1, (Word16)-var2);
1031e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1032e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
1033e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1034e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (var2 >= 31)
1035e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
1036e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            L_var_out = (L_var1 < 0L) ? -1 : 0;
1037e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
1038e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else
1039e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
1040e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            if (L_var1 < 0)
1041e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
1042e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                L_var_out = ~((~L_var1) >> var2);
1043e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
1044e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            else
1045e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
1046e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                L_var_out = L_var1 >> var2;
1047e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
1048e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
1049e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1050e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var_out);
1051e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1052e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1053e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1054e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
1055e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1056e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : shr_r                                                   |
1057e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1058e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
1059e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1060e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Same as shr(var1,var2) but with rounding. Saturate the result in case of|
1061e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   underflows or overflows :                                               |
1062e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    - If var2 is greater than zero :                                       |
1063e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |          if (sub(shl(shr(var1,var2),1),shr(var1,sub(var2,1))))            |
1064e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |          is equal to zero                                                 |
1065e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                     then                                                  |
1066e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                     shr_r(var1,var2) = shr(var1,var2)                     |
1067e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                     else                                                  |
1068e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                     shr_r(var1,var2) = add(shr(var1,var2),1)              |
1069e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    - If var2 is less than or equal to zero :                              |
1070e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                     shr_r(var1,var2) = shr(var1,var2).                    |
1071e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1072e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 2                                                   |
1073e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1074e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
1075e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1076e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
1077e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1078e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
1079e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1080e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
1081e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1082e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
1083e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1084e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
1085e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1086e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
1087e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1088e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
1089e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1090e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
1091e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1092e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
1093e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
1094e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
1095e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!SHR_R_IS_INLINE)
1096e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 shr_r (Word16 var1, Word16 var2)
1097e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1098e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
1099e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var2 > 15)
1101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1102e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = 0;
1103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
1105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = shr (var1, var2);
1107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1108e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (var2 > 0)
1109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
1110e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            if ((var1 & ((Word16) 1 << (var2 - 1))) != 0)
1111e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
1112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                var_out++;
1113e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
1114e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
1115e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1116e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1117e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
1118e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1119e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1120e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1121e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
1122e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1123e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : mac_r                                                   |
1124e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1125e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
1126e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1127e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Multiply var1 by var2 and shift the result left by 1. Add the 32 bit    |
1128e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   result to L_var3 with saturation. Round the LS 16 bits of the result    |
1129e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   into the MS 16 bits with saturation and shift the result right by 16.   |
1130e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return a 16 bit result.                                                 |
1131e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |            mac_r(L_var3,var1,var2) = round(L_mac(L_var3,var1,var2))       |
1132e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1133e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 2                                                   |
1134e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1135e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
1136e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1137e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var3   32 bit long signed integer (Word32) whose value falls in the  |
1138e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
1139e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1140e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
1141e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1142e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
1143e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1144e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
1145e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1146e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
1147e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1148e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
1149e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1150e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
1151e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1152e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
1153e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1154e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
1155e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1156e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x0000 8000 <= L_var_out <= 0x0000 7fff.              |
1157e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
1158e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
1159e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!MAC_R_IS_INLINE)
1160e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 mac_r (Word32 L_var3, Word16 var1, Word16 var2)
1161e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1162e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
1163e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1164e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var3 = L_mac (L_var3, var1, var2);
1165e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var3 = L_add (L_var3, (Word32) 0x00008000L);
1166e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = extract_h (L_var3);
1167e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1168e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
1169e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1170e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1171e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1172e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
1173e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1174e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : msu_r                                                   |
1175e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1176e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
1177e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1178e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Multiply var1 by var2 and shift the result left by 1. Subtract the 32   |
1179e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   bit result to L_var3 with saturation. Round the LS 16 bits of the res-  |
1180e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   ult into the MS 16 bits with saturation and shift the result right by   |
1181e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   16. Return a 16 bit result.                                             |
1182e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |            msu_r(L_var3,var1,var2) = round(L_msu(L_var3,var1,var2))       |
1183e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1184e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 2                                                   |
1185e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1186e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
1187e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1188e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var3   32 bit long signed integer (Word32) whose value falls in the  |
1189e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
1190e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1191e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
1192e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1193e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
1194e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1195e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
1196e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1197e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
1198e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1199e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
1200e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1201e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
1202e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1203e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
1204e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1205e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
1206e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1207e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x0000 8000 <= L_var_out <= 0x0000 7fff.              |
1208e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
1209e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
1210e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!MSU_R_IS_INLINE)
1211e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 msu_r (Word32 L_var3, Word16 var1, Word16 var2)
1212e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1213e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
1214e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1215e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var3 = L_msu (L_var3, var1, var2);
1216e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var3 = L_add (L_var3, (Word32) 0x00008000L);
1217e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = extract_h (L_var3);
1218e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1219e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
1220e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1221e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1222e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1223e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
1224e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1225e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : L_deposit_h                                             |
1226e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1227e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
1228e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1229e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Deposit the 16 bit var1 into the 16 MS bits of the 32 bit output. The   |
1230e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   16 LS bits of the output are zeroed.                                    |
1231e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1232e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 2                                                   |
1233e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1234e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
1235e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1236e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
1237e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1238e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
1239e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1240e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
1241e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1242e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
1243e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1244e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
1245e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1246e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var_out                                                              |
1247e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
1248e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= var_out <= 0x7fff 0000.                |
1249e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
1250e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
1251e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//Word32 L_deposit_h (Word16 var1)
1252e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//{
1253e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    Word32 L_var_out;
1254e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//
1255e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    L_var_out = (Word32) var1 << 16;
1256e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//
1257e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    return (L_var_out);
1258e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//}
1259e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1260e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1261e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
1262e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1263e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : L_deposit_l                                             |
1264e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1265e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
1266e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1267e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Deposit the 16 bit var1 into the 16 LS bits of the 32 bit output. The   |
1268e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   16 MS bits of the output are sign extended.                             |
1269e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1270e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 2                                                   |
1271e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1272e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
1273e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1274e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
1275e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1276e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
1277e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1278e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
1279e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1280e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
1281e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1282e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
1283e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1284e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var_out                                                              |
1285e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
1286e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xFFFF 8000 <= var_out <= 0x0000 7fff.                |
1287e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
1288e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
1289e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//Word32 L_deposit_l (Word16 var1)
1290e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//{
1291e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    Word32 L_var_out;
1292e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//
1293e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    L_var_out = (Word32) var1;
1294e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//
1295e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    return (L_var_out);
1296e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//}
1297e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1298e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1299e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
1300e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1301e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : L_shr_r                                                 |
1302e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1303e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
1304e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1305e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Same as L_shr(L_var1,var2) but with rounding. Saturate the result in    |
1306e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   case of underflows or overflows :                                       |
1307e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    - If var2 is greater than zero :                                       |
1308e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |          if (L_sub(L_shl(L_shr(L_var1,var2),1),L_shr(L_var1,sub(var2,1))))|
1309e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |          is equal to zero                                                 |
1310e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                     then                                                  |
1311e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                     L_shr_r(L_var1,var2) = L_shr(L_var1,var2)             |
1312e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                     else                                                  |
1313e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                     L_shr_r(L_var1,var2) = L_add(L_shr(L_var1,var2),1)    |
1314e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    - If var2 is less than or equal to zero :                              |
1315e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                     L_shr_r(L_var1,var2) = L_shr(L_var1,var2).            |
1316e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1317e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 3                                                   |
1318e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1319e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
1320e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1321e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var1                                                                 |
1322e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
1323e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |
1324e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1325e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
1326e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1327e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
1328e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1329e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
1330e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1331e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
1332e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1333e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
1334e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1335e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var_out                                                              |
1336e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
1337e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= var_out <= 0x7fff ffff.                |
1338e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
1339e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
1340e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!L_SHR_R_IS_INLINE)
1341e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_shr_r (Word32 L_var1, Word16 var2)
1342e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1343e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out;
1344e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1345e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var2 > 31)
1346e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1347e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_var_out = 0;
1348e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1349e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
1350e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1351e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_var_out = L_shr (L_var1, var2);
1352e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1353e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (var2 > 0)
1354e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
1355e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            if ((L_var1 & ((Word32) 1 << (var2 - 1))) != 0)
1356e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
1357e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                L_var_out++;
1358e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
1359e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
1360e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1361e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1362e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var_out);
1363e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1364e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1365e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1366e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
1367e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1368e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : L_abs                                                   |
1369e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1370e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
1371e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1372e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    Absolute value of L_var1; Saturate in case where the input is          |
1373e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                               -214783648  |
1374e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1375e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 3                                                   |
1376e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1377e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
1378e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1379e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var1                                                                 |
1380e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
1381e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |
1382e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1383e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
1384e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1385e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
1386e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1387e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
1388e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1389e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var_out                                                              |
1390e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
1391e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x0000 0000 <= var_out <= 0x7fff ffff.                |
1392e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
1393e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
1394e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//Word32 L_abs (Word32 L_var1)
1395e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//{
1396e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    Word32 L_var_out;
1397e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//
1398e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    if (L_var1 == MIN_32)
1399e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    {
1400e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//        L_var_out = MAX_32;
1401e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    }
1402e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    else
1403e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    {
1404e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//        if (L_var1 < 0)
1405e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//        {
1406e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//            L_var_out = -L_var1;
1407e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//        }
1408e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//        else
1409e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//        {
1410e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//            L_var_out = L_var1;
1411e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//        }
1412e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    }
1413e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//
1414e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//    return (L_var_out);
1415e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//}
1416e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1417e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
1418e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1419e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : norm_s                                                  |
1420e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1421e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
1422e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1423e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Produces the number of left shift needed to normalize the 16 bit varia- |
1424e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   ble var1 for positive values on the interval with minimum of 16384 and  |
1425e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   maximum of 32767, and for negative values on the interval with minimum  |
1426e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   of -32768 and maximum of -16384; in order to normalize the result, the  |
1427e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   following operation must be done :                                      |
1428e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                    norm_var1 = shl(var1,norm_s(var1)).                    |
1429e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1430e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 15                                                  |
1431e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1432e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
1433e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1434e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
1435e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1436e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
1437e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1438e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
1439e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1440e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
1441e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1442e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
1443e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1444e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
1445e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1446e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x0000 0000 <= var_out <= 0x0000 000f.                |
1447e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
1448e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
1449e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1450e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!NORM_S_IS_INLINE)
1451e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 norm_s (Word16 var1)
1452e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1453e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
1454e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1455e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var1 == 0)
1456e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1457e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = 0;
1458e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1459e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
1460e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1461e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (var1 == -1)
1462e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
1463e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            var_out = 15;
1464e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
1465e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else
1466e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
1467e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            if (var1 < 0)
1468e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
1469e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                var1 = (Word16)~var1;
1470e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
1471e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            for (var_out = 0; var1 < 0x4000; var_out++)
1472e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
1473e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                var1 <<= 1;
1474e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
1475e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
1476e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1477e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1478e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
1479e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1480e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1481e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1482e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
1483e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1484e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : div_s                                                   |
1485e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1486e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
1487e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1488e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Produces a result which is the fractional integer division of var1  by  |
1489e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   var2; var1 and var2 must be positive and var2 must be greater or equal  |
1490e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   to var1; the result is positive (leading bit equal to 0) and truncated  |
1491e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   to 16 bits.                                                             |
1492e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   If var1 = var2 then div(var1,var2) = 32767.                             |
1493e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1494e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 18                                                  |
1495e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1496e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
1497e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1498e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var1                                                                   |
1499e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1500e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x0000 0000 <= var1 <= var2 and var2 != 0.            |
1501e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1502e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var2                                                                   |
1503e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1504e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : var1 <= var2 <= 0x0000 7fff and var2 != 0.            |
1505e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1506e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
1507e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1508e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
1509e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1510e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
1511e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1512e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
1513e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1514e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x0000 0000 <= var_out <= 0x0000 7fff.                |
1515e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             It's a Q15 value (point between b15 and b14).                 |
1516e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
1517e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
1518e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1519e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!DIV_S_IS_INLINE)
1520e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 div_s (Word16 var1, Word16 var2)
1521e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1522e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out = 0;
1523e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 iteration;
1524e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_num;
1525e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_denom;
1526e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1527e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var1 == 0)
1528e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1529e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = 0;
1530e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1531e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
1532e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1533e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (var1 == var2)
1534e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
1535e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            var_out = MAX_16;
1536e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
1537e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else
1538e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
1539e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            L_num = L_deposit_l (var1);
1540e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            L_denom = L_deposit_l (var2);
1541e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1542e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            for (iteration = 0; iteration < 15; iteration++)
1543e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
1544e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                var_out <<= 1;
1545e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                L_num <<= 1;
1546e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1547e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                if (L_num >= L_denom)
1548e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                {
1549e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                    L_num = L_sub(L_num, L_denom);
1550e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                    var_out = add (var_out, 1);
1551e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                }
1552e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
1553e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
1554e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1555e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1556e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
1557e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1558e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1559e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1560e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
1561e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1562e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Function Name : norm_l                                                  |
1563e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1564e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Purpose :                                                               |
1565e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1566e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Produces the number of left shifts needed to normalize the 32 bit varia-|
1567e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   ble L_var1 for positive values on the interval with minimum of          |
1568e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   1073741824 and maximum of 2147483647, and for negative values on the in-|
1569e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   terval with minimum of -2147483648 and maximum of -1073741824; in order |
1570e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   to normalize the result, the following operation must be done :         |
1571e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                   norm_L_var1 = L_shl(L_var1,norm_l(L_var1)).             |
1572e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1573e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Complexity weight : 30                                                  |
1574e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1575e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Inputs :                                                                |
1576e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1577e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    L_var1                                                                 |
1578e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             32 bit long signed integer (Word32) whose value falls in the  |
1579e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |
1580e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1581e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Outputs :                                                               |
1582e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1583e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    none                                                                   |
1584e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1585e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   Return Value :                                                          |
1586e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
1587e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |    var_out                                                                |
1588e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             16 bit short signed integer (Word16) whose value falls in the |
1589e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |             range : 0x0000 0000 <= var_out <= 0x0000 001f.                |
1590e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
1591e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
1592e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1593e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (!NORM_L_IS_INLINE)
1594e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 norm_l (Word32 L_var1)
1595e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1596e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
1597e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1598e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (L_var1 == 0)
1599e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1600e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = 0;
1601e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1602e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
1603e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1604e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (L_var1 == (Word32) 0xffffffffL)
1605e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
1606e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            var_out = 31;
1607e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
1608e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else
1609e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
1610e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            if (L_var1 < 0)
1611e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
1612e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                L_var1 = ~L_var1;
1613e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
1614e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            for (var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++)
1615e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
1616e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                L_var1 <<= 1;
1617e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
1618e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
1619e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1620e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1621e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
1622e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1623e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1624956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
1625