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.h
18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Content:	Constants , Globals and Basic arithmetic operators.
20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
21956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong*******************************************************************************/
22956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
23956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#ifndef __BASIC_OP_H
24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define __BASIC_OP_H
25956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
26956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#include "typedef.h"
27956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
28956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#define MAX_32 (Word32)0x7fffffffL
29956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#define MIN_32 (Word32)0x80000000L
30956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
31956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#define MAX_16 (Word16)0x7fff
32956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#define MIN_16 (Word16)0x8000
33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ABS(a)	((a) >= 0) ? (a) : (-(a))
34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
35e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short abs,           1   */
36e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define abs_s(x)       ((Word16)(((x) != MIN_16) ? (((x) >= 0) ? (x) : (-(x))) : MAX_16))
37e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* 16 bit var1 -> MSB,     2 */
39e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define L_deposit_h(x) (((Word32)(x)) << 16)
40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* 16 bit var1 -> LSB,     2 */
43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define L_deposit_l(x) ((Word32)(x))
44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
45e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Long abs,              3  */
47e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define L_abs(x) (((x) != MIN_32) ? (((x) >= 0) ? (x) : (-(x))) : MAX_32)
48e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
49e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short negate,        1   */
51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define negate(var1) ((Word16)(((var1) == MIN_16) ? MAX_16 : (-(var1))))
52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
54e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Long negate,     2 */
55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define L_negate(L_var1) (((L_var1) == (MIN_32)) ? (MAX_32) : (-(L_var1)))
56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define MULHIGH(A,B) (int)(((Word64)(A)*(Word64)(B)) >> 32)
59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define fixmul(a, b) (int)((((Word64)(a)*(Word64)(b)) >> 32) << 1)
60e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
62e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if  (SATRUATE_IS_INLINE)
63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 saturate(Word32 L_var1);
64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
65e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 saturate(Word32 L_var1);
66e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
68e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short shift left,    1   */
69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (SHL_IS_INLINE)
70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 shl (Word16 var1, Word16 var2);
71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
72e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 shl (Word16 var1, Word16 var2);
73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
74e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short shift right,   1   */
76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (SHR_IS_INLINE)
77e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 shr (Word16 var1, Word16 var2);
78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
79e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 shr (Word16 var1, Word16 var2);
80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
81e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_MULT_IS_INLINE)
83e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_mult(Word16 var1, Word16 var2);
84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
85e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_mult(Word16 var1, Word16 var2);
86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Msu,  1  */
89e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_MSU_IS_INLINE)
90e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2);
91e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
92e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_msu (Word32 L_var3, Word16 var1, Word16 var2);
93e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
94b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Long sub,        2 */
96e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_SUB_IS_INLINE)
97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_sub(Word32 L_var1, Word32 L_var2);
98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
99e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_sub(Word32 L_var1, Word32 L_var2);
100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
102e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Long shift left, 2 */
103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_SHL_IS_INLINE)
104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_shl (Word32 L_var1, Word16 var2);
105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
106e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_shl (Word32 L_var1, Word16 var2);
107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
108e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Long shift right, 2*/
110e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_SHR_IS_INLINE)
111e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_shr (Word32 L_var1, Word16 var2);
112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
113e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_shr (Word32 L_var1, Word16 var2);
114e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
115e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
116e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short add,           1   */
117e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (ADD_IS_INLINE)
118e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 add (Word16 var1, Word16 var2);
119e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
120e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 add (Word16 var1, Word16 var2);
121e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
122b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
123e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short sub,           1   */
124e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (SUB_IS_INLINE)
125e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 sub(Word16 var1, Word16 var2);
126e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
127e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 sub(Word16 var1, Word16 var2);
128e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
129e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
130e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short division,       18  */
131e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (DIV_S_IS_INLINE)
132e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 div_s (Word16 var1, Word16 var2);
133e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
134e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 div_s (Word16 var1, Word16 var2);
135e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
136e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
137e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short mult,          1   */
138e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (MULT_IS_INLINE)
139e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 mult (Word16 var1, Word16 var2);
140e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
141e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 mult (Word16 var1, Word16 var2);
142e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
143e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
144e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short norm,           15  */
145e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (NORM_S_IS_INLINE)
146e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 norm_s (Word16 var1);
147e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
148e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 norm_s (Word16 var1);
149e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
150e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
151e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Long norm,            30  */
152e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (NORM_L_IS_INLINE)
153e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 norm_l (Word32 L_var1);
154e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
155e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 norm_l (Word32 L_var1);
156e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
157e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
158e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Round,               1   */
159e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (ROUND_IS_INLINE)
160e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 round16(Word32 L_var1);
161e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
162e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 round16(Word32 L_var1);
163e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
164e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
165e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Mac,  1  */
166e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_MAC_IS_INLINE)
167e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2);
168e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
169e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_mac (Word32 L_var3, Word16 var1, Word16 var2);
170e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
171e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
172e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_ADD_IS_INLINE)
173e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_add (Word32 L_var1, Word32 L_var2);
174e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
175e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_add (Word32 L_var1, Word32 L_var2);
176e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
177e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
178e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Extract high,        1   */
179e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (EXTRACT_H_IS_INLINE)
180e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 extract_h (Word32 L_var1);
181e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
182e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 extract_h (Word32 L_var1);
183e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
184e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
185e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Extract low,         1   */
186e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (EXTRACT_L_IS_INLINE)
187e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 extract_l(Word32 L_var1);
188e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
189e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 extract_l(Word32 L_var1);
190e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
191e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
192e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Mult with round, 2 */
193e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (MULT_R_IS_INLINE)
194e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 mult_r(Word16 var1, Word16 var2);
195e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
196e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 mult_r(Word16 var1, Word16 var2);
197e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
198e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
199e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Shift right with round, 2           */
200e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (SHR_R_IS_INLINE)
201e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 shr_r (Word16 var1, Word16 var2);
202e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
203e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 shr_r (Word16 var1, Word16 var2);
204e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
205e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
206e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Mac with rounding,2 */
207e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (MAC_R_IS_INLINE)
208e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2);
209e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
210e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 mac_r (Word32 L_var3, Word16 var1, Word16 var2);
211e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
212e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
213e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Msu with rounding,2 */
214e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (MSU_R_IS_INLINE)
215e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2);
216e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
217e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 msu_r (Word32 L_var3, Word16 var1, Word16 var2);
218e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
219e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
220e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Long shift right with round,  3             */
221e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_SHR_R_IS_INLINE)
222e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_shr_r (Word32 L_var1, Word16 var2);
223e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
224e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 L_shr_r (Word32 L_var1, Word16 var2);
225e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
226e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
227e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV4_INASM
228e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 ASM_L_shr(Word32 L_var1, Word16 var2)
229e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
230fa9597bc0007f6a1d6704f047e7d94bb195c8a68Mans Rullgard	return L_var1 >> var2;
231e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
232b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
233e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 ASM_L_shl(Word32 L_var1, Word16 var2)
234e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
235b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	Word32 result;
2369da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	asm (
237b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		"MOV	%[result], %[L_var1], ASL %[var2] \n"
2389da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"TEQ	%[L_var1], %[result], ASR %[var2]\n"
2399da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"EORNE  %[result], %[mask], %[L_var1], ASR #31\n"
240d2fdc7129d96391d22065866c612d532dfe411b3Mans Rullgard		:[result]"=&r"(result)
2419da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		:[L_var1]"r"(L_var1), [var2]"r"(var2), [mask]"r"(0x7fffffff)
242b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		);
243b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	return result;
244e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
245e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
246e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 ASM_shr(Word32 L_var1, Word16 var2)
247e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
248b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	Word32 result;
2499da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	asm (
250e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		"CMP	%[var2], #15\n"
2519da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"MOVLT	%[result], %[L_var1], ASR %[var2]\n"
2529da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"MOVGE	%[result], %[L_var1], ASR #15\n"
253e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		:[result]"=r"(result)
254b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		:[L_var1]"r"(L_var1), [var2]"r"(var2)
255b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		);
256b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	return result;
257b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard}
258e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
259e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 ASM_shl(Word32 L_var1, Word16 var2)
260e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
261813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard#if ARMV6_SAT
262813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard	Word32 result;
263813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard	asm (
264813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		"CMP	%[var2], #16\n"
265813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		"MOVLT  %[result], %[L_var1], ASL %[var2]\n"
266813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		"MOVGE  %[result], %[L_var1], ASL #16\n"
267813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		"SSAT   %[result], #16, %[result]\n"
268813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		:[result]"=r"(result)
269813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		:[L_var1]"r"(L_var1), [var2]"r"(var2)
270813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		);
271813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard	return result;
272813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard#else
273b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	Word32 result;
2749da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	Word32 tmp;
2759da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	asm (
276e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		"CMP	%[var2], #16\n"
2779da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"MOVLT  %[result], %[L_var1], ASL %[var2]\n"
2789da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"MOVGE  %[result], %[L_var1], ASL #16\n"
2799da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard        "MOV    %[tmp], %[result], ASR #15\n"
2809da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard        "TEQ    %[tmp], %[result], ASR #31 \n"
2819da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard        "EORNE  %[result], %[mask], %[result],ASR #31"
2829da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		:[result]"=&r"(result), [tmp]"=&r"(tmp)
2839da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		:[L_var1]"r"(L_var1), [var2]"r"(var2), [mask]"r"(0x7fff)
284b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		);
285b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	return result;
286813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard#endif
287b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard}
288e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
289e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
290e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
291e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |                                                                           |
292e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |   definitions for inline basic arithmetic operators                       |
293e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard |___________________________________________________________________________|
294e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
295e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (SATRUATE_IS_INLINE)
296e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 saturate(Word32 L_var1)
297e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
298813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard#if ARMV6_SAT
299813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard    Word16 result;
300813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard	asm (
301813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		"SSAT %[result], #16, %[L_var1]"
302813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		: [result]"=r"(result)
303813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		: [L_var1]"r"(L_var1)
304813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		);
305813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard	return result;
306813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard#elif ARMV5TE_SAT
307e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word16 result;
3089da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	Word32 tmp;
309e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	asm volatile (
3109da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"MOV	%[tmp], %[L_var1],ASR#15\n"
3119da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"TEQ	%[tmp], %[L_var1],ASR#31\n"
3129da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"EORNE	%[result], %[mask],%[L_var1],ASR#31\n"
313d2fdc7129d96391d22065866c612d532dfe411b3Mans Rullgard		"MOVEQ	%[result], %[L_var1]\n"
3149da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		:[result]"=&r"(result), [tmp]"=&r"(tmp)
3159da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		:[L_var1]"r"(L_var1), [mask]"r"(0x7fff)
316e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	);
317e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
318e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return result;
319e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
320e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
321b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
322e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //var_out = (L_var1 > (Word32)0X00007fffL) ? (MAX_16) : ((L_var1 < (Word32)0xffff8000L) ? (MIN_16) : ((Word16)L_var1));
323e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
324e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (L_var1 > 0X00007fffL)
325e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
326e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = MAX_16;
327e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
328e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else if (L_var1 < (Word32) 0xffff8000L)
329e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
330e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = MIN_16;
331e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
332e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
333e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
334e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = extract_l(L_var1);
335e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
336e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
337e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
338e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
339e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
340e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
341e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
342e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short shift left,    1   */
343e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (SHL_IS_INLINE)
344e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 shl (Word16 var1, Word16 var2)
345e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
346e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV5TE_SHL
347e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if(var2>=0)
348e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
349e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		return ASM_shl( var1, var2);
350e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
351e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	else
352e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
353e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		return ASM_shr( var1, -var2);
354e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
355e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
356e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
357e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 result;
358e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
359e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var2 < 0)
360e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
361e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = shr (var1, (Word16)-var2);
362e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
363e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
364e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
365e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        result = (Word32) var1 *((Word32) 1 << var2);
366e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
367e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if ((var2 > 15 && var1 != 0) || (result != (Word32) ((Word16) result)))
368e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
369e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            var_out = (Word16)((var1 > 0) ? MAX_16 : MIN_16);
370e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
371e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else
372e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
373e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            var_out = extract_l(result);
374e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
375e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
376e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
377e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
378e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
379e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
380e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
381e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short shift right,   1   */
382e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (SHR_IS_INLINE)
383e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 shr (Word16 var1, Word16 var2)
384e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
385e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV5TE_SHR
386e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if(var2>=0)
387e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
388e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		return  ASM_shr( var1, var2);
389e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
390e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	else
391e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
392e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		return  ASM_shl( var1, -var2);
393e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
394e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
395e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
396e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
397e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var2 < 0)
398e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
399e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = shl (var1, (Word16)-var2);
400e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
401e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
402e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
403e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (var2 >= 15)
404e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
405e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            var_out = (Word16)((var1 < 0) ? -1 : 0);
406e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
407e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else
408e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
409e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            if (var1 < 0)
410e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
411e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                var_out = (Word16)(~((~var1) >> var2));
412e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
413e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            else
414e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
415e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                var_out = (Word16)(var1 >> var2);
416e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
417e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
418e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
419e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
420e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
421e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
422e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
423e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
424e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
425e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
426e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_MULT_IS_INLINE)
427e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_mult(Word16 var1, Word16 var2)
428e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
429e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV5TE_L_MULT
430b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	Word32 result;
4319da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	asm (
432b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		"SMULBB %[result], %[var1], %[var2] \n"
433b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		"QADD %[result], %[result], %[result] \n"
434d2fdc7129d96391d22065866c612d532dfe411b3Mans Rullgard		:[result]"=r"(result)
435e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		:[var1]"r"(var1), [var2]"r"(var2)
436b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		);
437e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return result;
438e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
439e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out;
440e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
441e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var_out = (Word32) var1 *(Word32) var2;
442e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
443e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (L_var_out != (Word32) 0x40000000L)
444e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
445e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_var_out <<= 1;
446e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
447e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
448e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
449e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_var_out = MAX_32;
450e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
451e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var_out);
452e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
453e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
454e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
455e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
456e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_MSU_IS_INLINE)
457e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2)
458e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
459e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV5TE_L_MSU
460b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	Word32 result;
4619da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	asm (
462b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		"SMULBB %[result], %[var1], %[var2] \n"
463b8576d5ae50294bb1917b84f366054ebff02a3a6Mans Rullgard		"QDSUB %[result], %[L_var3], %[result]\n"
464d2fdc7129d96391d22065866c612d532dfe411b3Mans Rullgard		:[result]"=&r"(result)
465e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		:[L_var3]"r"(L_var3), [var1]"r"(var1), [var2]"r"(var2)
466b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		);
467e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return result;
468e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
469e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out;
470e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_product;
471e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
472e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product = L_mult(var1, var2);
473e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var_out = L_sub(L_var3, L_product);
474e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var_out);
475e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
476e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
477e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
478e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
479e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_SUB_IS_INLINE)
480e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_sub(Word32 L_var1, Word32 L_var2)
481e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
482e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV5TE_L_SUB
483b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	Word32 result;
4849da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	asm (
485e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		"QSUB %[result], %[L_var1], %[L_var2]\n"
486d2fdc7129d96391d22065866c612d532dfe411b3Mans Rullgard		:[result]"=r"(result)
487e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		:[L_var1]"r"(L_var1), [L_var2]"r"(L_var2)
488b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		);
489e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return result;
490e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
491e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out;
492e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
493e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var_out = L_var1 - L_var2;
494e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
495e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (((L_var1 ^ L_var2) & MIN_32) != 0)
496e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
497e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if ((L_var_out ^ L_var1) & MIN_32)
498e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
499e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            L_var_out = (L_var1 < 0L) ? MIN_32 : MAX_32;
500e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
501e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
502e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
503e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var_out);
504e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
505e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
506e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
507e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
508e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_SHL_IS_INLINE)
509e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_shl(Word32 L_var1, Word16 var2)
510e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
511e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV5TE_L_SHL
512e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if(var2>=0)
513e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
514e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        return  ASM_L_shl( L_var1, var2);
515e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
516e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
517e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
518e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        return  ASM_L_shr( L_var1, -var2);
519e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
520e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
521e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out = 0L;
522e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
523e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var2 <= 0)
524e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
525e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_var1 = L_shr(L_var1, (Word16)-var2);
526e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
527e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
528e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
529e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        for (; var2 > 0; var2--)
530e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
531e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            if (L_var1 > (Word32) 0X3fffffffL)
532e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
533e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                return MAX_32;
534e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
535e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            else
536e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
537e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                if (L_var1 < (Word32) 0xc0000000L)
538e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                {
539e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                    return MIN_32;
540e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                }
541e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
542e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            L_var1 <<= 1;
543e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            L_var_out = L_var1;
544e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
545e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
546e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var1);
547e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
548e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
549e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
550e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
551e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_SHR_IS_INLINE)
552e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_shr (Word32 L_var1, Word16 var2)
553e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
554e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV5TE_L_SHR
555e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if(var2>=0)
556e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
557e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		return ASM_L_shr( L_var1, var2);
558e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
559e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	else
560e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
561e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		return ASM_L_shl( L_var1, -var2);
562e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
563e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
564e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out;
565e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
566e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var2 < 0)
567e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
568e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_var_out = L_shl (L_var1, (Word16)-var2);
569e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
570e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
571e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
572e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (var2 >= 31)
573e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
574e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            L_var_out = (L_var1 < 0L) ? -1 : 0;
575e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
576e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else
577e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
578e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            if (L_var1 < 0)
579e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
580e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                L_var_out = ~((~L_var1) >> var2);
581e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
582e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            else
583e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
584e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                L_var_out = L_var1 >> var2;
585e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
586e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
587e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
588e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var_out);
589e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
590e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
591e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
592e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
593e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short add,           1   */
594e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (ADD_IS_INLINE)
595e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 add (Word16 var1, Word16 var2)
596e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
597e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV5TE_ADD
598b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	Word32 result;
5999da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	Word32 tmp;
6009da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	asm (
601b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		"ADD  %[result], %[var1], %[var2] \n"
6029da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"MOV  %[tmp], %[result], ASR #15 \n"
6039da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"TEQ  %[tmp], %[result], ASR #31 \n"
6049da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"EORNE %[result], %[mask], %[result], ASR #31"
6059da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		:[result]"=&r"(result), [tmp]"=&r"(tmp)
6069da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		:[var1]"r"(var1), [var2]"r"(var2), [mask]"r"(0x7fff)
607b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		);
608e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return result;
609e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
610e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
611e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_sum;
612e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
613e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_sum = (Word32) var1 + var2;
614e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = saturate(L_sum);
615e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
616e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
617e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
618e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
619e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
620e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
621e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short sub,           1   */
622e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (SUB_IS_INLINE)
623e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 sub(Word16 var1, Word16 var2)
624e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
625e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV5TE_SUB
626b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	Word32 result;
6279da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	Word32 tmp;
6289da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	asm (
629b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		"SUB   %[result], %[var1], %[var2] \n"
6309da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"MOV   %[tmp], %[var1], ASR #15 \n"
6319da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"TEQ   %[tmp], %[var1], ASR #31 \n"
6329da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"EORNE %[result], %[mask], %[result], ASR #31 \n"
6339da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		:[result]"=&r"(result), [tmp]"=&r"(tmp)
6349da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		:[var1]"r"(var1), [var2]"r"(var2), [mask]"r"(0x7fff)
635b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		);
636e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return result;
637e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
638e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
639e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_diff;
640e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
641e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_diff = (Word32) var1 - var2;
642e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = saturate(L_diff);
643b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
644e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
645e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
646e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
647e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
648e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
649e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short division,       18  */
650e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (DIV_S_IS_INLINE)
651e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 div_s (Word16 var1, Word16 var2)
652e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
653e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out = 0;
654e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 iteration;
655e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_num;
656e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_denom;
657e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
658e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = MAX_16;
659e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var1!= var2)//var1!= var2
660e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
661e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    	var_out = 0;
662e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    	L_num = (Word32) var1;
663b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
664e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    	L_denom = (Word32) var2;
665b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
666e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		//return (L_num<<15)/var2;
667e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
668e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    	for (iteration = 0; iteration < 15; iteration++)
669e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    	{
670e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    		var_out <<= 1;
671e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    		L_num <<= 1;
672b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
673e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    		if (L_num >= L_denom)
674e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    		{
675e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    			L_num -= L_denom;
676e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    			var_out++;
677e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    		}
678e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    	}
679e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
680e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
681e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
682e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
683e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
684e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short mult,          1   */
685e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (MULT_IS_INLINE)
686e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 mult (Word16 var1, Word16 var2)
687e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
688813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard#if ARMV5TE_MULT && ARMV6_SAT
689813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard	Word32 result;
690813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard	asm (
691813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		"SMULBB %[result], %[var1], %[var2] \n"
692813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		"SSAT   %[result], #16, %[result], ASR #15 \n"
693813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		:[result]"=r"(result)
694813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		:[var1]"r"(var1), [var2]"r"(var2)
695813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard		);
696813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard	return result;
697813eebeb773b1e4c42c2063a7fe37a94514e596aMans Rullgard#elif ARMV5TE_MULT
6989da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	Word32 result, tmp;
6999da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	asm (
7009da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"SMULBB %[tmp], %[var1], %[var2] \n"
7019da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"MOV	%[result], %[tmp], ASR #15\n"
7029da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"MOV	%[tmp], %[result], ASR #15\n"
7039da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"TEQ	%[tmp], %[result], ASR #31\n"
7049da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"EORNE  %[result], %[mask], %[result], ASR #31 \n"
7059da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		:[result]"=&r"(result), [tmp]"=&r"(tmp)
7069da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		:[var1]"r"(var1), [var2]"r"(var2), [mask]"r"(0x7fff)
707b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		);
708e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return result;
709e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
710e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
711e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_product;
712e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
713e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product = (Word32) var1 *(Word32) var2;
714e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product = (L_product & (Word32) 0xffff8000L) >> 15;
715e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (L_product & (Word32) 0x00010000L)
716e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_product = L_product | (Word32) 0xffff0000L;
717e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = saturate(L_product);
718e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
719e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
720e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
721e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
722e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
723e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
724e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
725e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Short norm,           15  */
726e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (NORM_S_IS_INLINE)
727e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 norm_s (Word16 var1)
728e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
729e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV5TE_NORM_S
730b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	Word16 result;
7319da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	Word32 tmp;
7329da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	asm (
7339da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"RSBS  %[tmp], %[var1], #0 \n"
7349da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"CLZLT %[result], %[var1]\n"
7359da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"CLZGT %[result], %[tmp]\n"
736e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		"SUBNE %[result], %[result], #17\n"
737e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		"MOVEQ %[result], #0\n"
7389da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"CMP   %[var1], #-1\n"
739b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		"MOVEQ %[result], #15\n"
7409da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		:[result]"=&r"(result), [tmp]"=&r"(tmp)
741e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		:[var1]"r"(var1)
742b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		);
743e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return result;
744e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
745e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
746e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
747e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var1 == 0)
748e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
749e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = 0;
750e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
751e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
752e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
753e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (var1 == -1)
754e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
755e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            var_out = 15;
756e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
757e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else
758e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
759e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            if (var1 < 0)
760e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
761e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                var1 = (Word16)~var1;
762e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
763e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            for (var_out = 0; var1 < 0x4000; var_out++)
764e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
765e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                var1 <<= 1;
766e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
767e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
768e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
769e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
770e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
771e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
772e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
773e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
774e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Long norm,            30  */
775e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (NORM_L_IS_INLINE)
776e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 norm_l (Word32 L_var1)
777e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
778e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV5TE_NORM_L
779b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	Word16 result;
780b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	asm volatile(
781e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		"CMP    %[L_var1], #0\n"
782e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		"CLZNE  %[result], %[L_var1]\n"
783b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		"SUBNE  %[result], %[result], #1\n"
784e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		"MOVEQ  %[result], #0\n"
785d2fdc7129d96391d22065866c612d532dfe411b3Mans Rullgard		:[result]"=r"(result)
786e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		:[L_var1]"r"(L_var1)
787b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		);
788e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return result;
789e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
790e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //Word16 var_out;
791e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
792e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //if (L_var1 == 0)
793e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //{
794e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //    var_out = 0;
795e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //}
796e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //else
797e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //{
798e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //    if (L_var1 == (Word32) 0xffffffffL)
799e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //    {
800e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //        var_out = 31;
801e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //    }
802e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //    else
803e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //    {
804e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //        if (L_var1 < 0)
805e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //        {
806e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //            L_var1 = ~L_var1;
807e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //        }
808e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //        for (var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++)
809e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //        {
810e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //            L_var1 <<= 1;
811e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //        }
812e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //    }
813e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //}
814e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    //return (var_out);
815e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard  Word16 a16;
816b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard  Word16 r = 0 ;
817b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
818e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
819e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard  if ( L_var1 < 0 ) {
820b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard    L_var1 = ~L_var1;
821e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard  }
822e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
823e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard  if (0 == (L_var1 & 0x7fff8000)) {
824e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    a16 = extract_l(L_var1);
825e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    r += 16;
826b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
827e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (0 == (a16 & 0x7f80)) {
828e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      r += 8;
829b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
830e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      if (0 == (a16 & 0x0078)) {
831e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        r += 4;
832b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
833e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (0 == (a16 & 0x0006)) {
834e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          r += 2;
835b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
836e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x0001)) {
837e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
838e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
839e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
840e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else {
841b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
842e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x0004)) {
843e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
844e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
845e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
846e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      }
847e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      else {
848b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
849e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (0 == (a16 & 0x0060)) {
850e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          r += 2;
851b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
852e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x0010)) {
853e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
854e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
855e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
856e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else {
857b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
858e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x0040)) {
859e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
860e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
861e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
862e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      }
863b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard    }
864b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard    else {
865b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
866e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      if (0 == (a16 & 0x7800)) {
867e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        r += 4;
868b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
869e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (0 == (a16 & 0x0600)) {
870e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          r += 2;
871b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
872e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x0100)) {
873e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
874e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
875e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
876e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else {
877b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
878e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x0400)) {
879e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
880e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
881e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
882e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      }
883e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      else {
884b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
885e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (0 == (a16 & 0x6000)) {
886e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          r += 2;
887b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
888e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x1000)) {
889e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
890e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
891e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
892e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else {
893b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
894e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x4000)) {
895e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
896e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
897e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
898e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      }
899e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
900e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard  }
901e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard  else {
902e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    a16 = extract_h(L_var1);
903b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
904e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (0 == (a16 & 0x7f80)) {
905e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      r += 8;
906b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
907e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      if (0 == (a16 & 0x0078)) {
908e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        r += 4 ;
909b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
910e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (0 == (a16 & 0x0006)) {
911e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          r += 2;
912b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
913e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x0001)) {
914e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
915e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
916e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
917e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else {
918b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
919e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x0004)) {
920e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
921e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
922e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
923e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      }
924e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      else {
925b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
926e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (0 == (a16 & 0x0060)) {
927e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          r += 2;
928b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
929e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x0010)) {
930e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
931e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
932e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
933e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else {
934b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
935e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x0040)) {
936e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
937e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
938e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
939e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      }
940e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
941e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else {
942b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
943e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      if (0 == (a16 & 0x7800)) {
944e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        r += 4;
945b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
946e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (0 == (a16 & 0x0600)) {
947e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          r += 2;
948b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
949e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x0100)) {
950e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
951e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
952e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
953e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else {
954b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
955e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x0400)) {
956e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
957e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
958e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
959e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      }
960e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      else {
961b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
962e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (0 == (a16 & 0x6000)) {
963e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          r += 2;
964b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
965e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x1000)) {
966e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            r += 1;
967e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
968e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
969e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        else {
970b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
971e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          if (0 == (a16 & 0x4000)) {
972e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            return 1;
973e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard          }
974e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
975e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard      }
976e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
977e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard  }
978b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
979e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard  return r ;
980e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
981e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
982e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
983e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
984e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Round,               1   */
985e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (ROUND_IS_INLINE)
986e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 round16(Word32 L_var1)
987e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
988e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV5TE_ROUND
989b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	Word16 result;
9909da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	asm (
9919da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		"QADD  %[result], %[L_var1], %[bias]\n"
992b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		"MOV   %[result], %[result], ASR #16 \n"
993d2fdc7129d96391d22065866c612d532dfe411b3Mans Rullgard		:[result]"=r"(result)
9949da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard		:[L_var1]"r"(L_var1), [bias]"r"(0x8000)
995b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		);
996e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return result;
997b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard#else
998e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
999e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_rounded;
1000e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1001e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_rounded = L_add (L_var1, (Word32) 0x00008000L);
1002e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = extract_h (L_rounded);
1003e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
1004e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1005e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1006e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1007e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1008e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Mac,  1  */
1009e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_MAC_IS_INLINE)
1010e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2)
1011e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1012e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV5TE_L_MAC
1013b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	Word32 result;
10149da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	asm (
1015e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		"SMULBB %[result], %[var1], %[var2]\n"
1016b8576d5ae50294bb1917b84f366054ebff02a3a6Mans Rullgard		"QDADD  %[result], %[L_var3], %[result]\n"
1017d2fdc7129d96391d22065866c612d532dfe411b3Mans Rullgard		:[result]"=&r"(result)
1018e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		: [L_var3]"r"(L_var3), [var1]"r"(var1), [var2]"r"(var2)
1019b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		);
1020e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return result;
1021e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
1022e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out;
1023e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_product;
1024e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1025e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product = L_mult(var1, var2);
1026e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var_out = L_add (L_var3, L_product);
1027e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var_out);
1028e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1029e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1030e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1031e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1032e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_ADD_IS_INLINE)
1033e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_add (Word32 L_var1, Word32 L_var2)
1034e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1035e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if ARMV5TE_L_ADD
1036b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	Word32 result;
10379da751147af3222258093d9f41cabf0ea1391c04Mans Rullgard	asm (
1038e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		"QADD %[result], %[L_var1], %[L_var2]\n"
1039d2fdc7129d96391d22065866c612d532dfe411b3Mans Rullgard		:[result]"=r"(result)
1040e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		:[L_var1]"r"(L_var1), [L_var2]"r"(L_var2)
1041b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard		);
1042e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return result;
1043e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#else
1044e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out;
1045e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1046e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var_out = L_var1 + L_var2;
1047e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (((L_var1 ^ L_var2) & MIN_32) == 0)
1048e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1049e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if ((L_var_out ^ L_var1) & MIN_32)
1050e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
1051e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            L_var_out = (L_var1 < 0) ? MIN_32 : MAX_32;
1052e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
1053e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1054e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var_out);
1055e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1056e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1057e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1058e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1059e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1060e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1061e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (MULT_R_IS_INLINE)
1062e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 mult_r (Word16 var1, Word16 var2)
1063e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1064e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
1065e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_product_arr;
1066e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1067e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product_arr = (Word32)var1 *(Word32)var2;       /* product */
1068e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product_arr += (Word32)0x00004000L;      /* round */
1069e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_product_arr >>= 15;       /* shift */
1070e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1071e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = saturate(L_product_arr);
1072e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1073e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
1074e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1075e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1076e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1077e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (SHR_R_IS_INLINE)
1078e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 shr_r (Word16 var1, Word16 var2)
1079e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1080e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
1081e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1082e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var2 > 15)
1083e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1084e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = 0;
1085e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1086e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
1087e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1088e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        var_out = shr(var1, var2);
1089e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1090e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (var2 > 0)
1091e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
1092e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            if ((var1 & ((Word16) 1 << (var2 - 1))) != 0)
1093e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
1094e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                var_out++;
1095e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
1096e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
1097e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1098e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1099e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
1100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1102e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (MAC_R_IS_INLINE)
1104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2)
1105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
1107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1108e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var3 = L_mac (L_var3, var1, var2);
1109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = (Word16)((L_var3 + 0x8000L) >> 16);
1110e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1111e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
1112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1113e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1114e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1115e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (MSU_R_IS_INLINE)
1116e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2)
1117e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1118e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
1119e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1120e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    L_var3 = L_msu (L_var3, var1, var2);
1121e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = (Word16)((L_var3 + 0x8000L) >> 16);
1122b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
1123e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
1124e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1125e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1126e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1127e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (L_SHR_R_IS_INLINE)
1128e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word32 L_shr_r (Word32 L_var1, Word16 var2)
1129e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1130e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word32 L_var_out;
1131e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1132e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    if (var2 > 31)
1133e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1134e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_var_out = 0;
1135e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1136e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    else
1137e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    {
1138e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        L_var_out = L_shr(L_var1, var2);
1139e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1140e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        if (var2 > 0)
1141e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        {
1142e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            if ((L_var1 & ((Word32) 1 << (var2 - 1))) != 0)
1143e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            {
1144e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard                L_var_out++;
1145e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard            }
1146e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        }
1147e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    }
1148e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1149e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (L_var_out);
1150e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1151e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1152e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1153e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (EXTRACT_H_IS_INLINE)
1154e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 extract_h (Word32 L_var1)
1155e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1156e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    Word16 var_out;
1157e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1158e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    var_out = (Word16) (L_var1 >> 16);
1159e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1160e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    return (var_out);
1161e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1162e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1163e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1164e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if (EXTRACT_L_IS_INLINE)
1165e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard__inline Word16 extract_l(Word32 L_var1)
1166e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1167e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (Word16) L_var1;
1168e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1169e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif
1170e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1171956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#endif
1172