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
18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#ifndef __BASIC_OP_H__
19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define __BASIC_OP_H__
20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include <stdio.h>
22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include <stdlib.h>
23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include "typedef.h"
24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define MAX_32 (Word32)0x7fffffffL
26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define MIN_32 (Word32)0x80000000L
27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define MAX_16 (Word16)+32767	/* 0x7fff */
29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define MIN_16 (Word16)-32768	/* 0x8000 */
30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
31e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
32e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define  static_vo  static __inline
33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define saturate(L_var1) (((L_var1) > 0X00007fffL) ? (MAX_16): (((L_var1) < (Word32) 0xffff8000L) ? (MIN_16): ((L_var1) & 0xffff)))
35e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
36e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define abs_s(x)       ((Word16)(((x) != MIN_16) ? (((x) >= 0) ? (x) : (-(x))) : MAX_16))  /* Short abs,           1   */
37e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define L_deposit_h(x) (((Word32)(x)) << 16)                                               /* 16 bit var1 -> MSB,     2 */
38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define L_deposit_l(x) ((Word32)(x))                                                       /* 16 bit var1 -> LSB,     2 */
39e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define L_abs(x) (((x) != MIN_32) ? (((x) >= 0) ? (x) : (-(x))) : MAX_32)                  /* Long abs,              3*/
40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define negate(var1) ((Word16)(((var1) == MIN_16) ? MAX_16 : (-(var1))))                   /* Short negate,        1*/
41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define L_negate(L_var1) (((L_var1) == (MIN_32)) ? (MAX_32) : (-(L_var1)))                 /* Long negate,     2*/
42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define extract_h(a)			((Word16)(a >> 16))
45e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define extract_l(x)            	(Word16)((x))
46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define add1(a,b)			(a + b)
47e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define vo_L_msu(a,b,c)			( a - (( b * c ) << 1) )
48e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define vo_mult32(a, b)         ((a) * (b))
49e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define vo_mult(a,b)			(( a * b ) >> 15 )
50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define	vo_L_mult(a,b)	    		(((a) * (b)) << 1)
51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define vo_shr_r(var1, var2)   		((var1+((Word16)(1L<<(var2-1))))>>var2)
52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define vo_sub(a,b)			(a - b)
53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define vo_L_deposit_h(a)		((Word32)((a) << 16))
54e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define vo_round(a)			((a + 0x00008000) >> 16)
55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define vo_extract_l(a)			((Word16)(a))
56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define vo_L_add(a,b)			(a + b)
57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define vo_L_sub(a,b)			(a - b)
58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define vo_mult_r(a,b)			((( a * b ) + 0x4000 ) >> 15 )
59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define vo_negate(a)		        (-a)
60e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define vo_L_shr_r(L_var1, var2)        ((L_var1+((Word32)(1L<<(var2-1))))>>var2)
61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
62e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
65e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Prototypes for basic arithmetic operators                               |
66e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
68e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 add (Word16 var1, Word16 var2);				/* Short add,1 */
69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 sub (Word16 var1, Word16 var2);				/* Short sub,1 */
70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 shl (Word16 var1, Word16 var2);                                /* Short shift left,    1   */
71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 shr (Word16 var1, Word16 var2);                                /* Short shift right,   1   */
72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 mult (Word16 var1, Word16 var2);                               /* Short mult,          1   */
73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_mult (Word16 var1, Word16 var2);                             /* Long mult,           1   */
74e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 voround (Word32 L_var1);                                       /* Round,               1   */
75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2);            	/* Mac,  1  */
76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2);   		/* Msu,  1  */
77e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_add (Word32 L_var1, Word32 L_var2);   		 	/* Long add,        2 */
78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_sub (Word32 L_var1, Word32 L_var2);   			/* Long sub,        2 */
79e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 mult_r (Word16 var1, Word16 var2);      		 	/* Mult with round, 2 */
80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_shl2(Word32 L_var1, Word16 var2);             		/* var2 > 0*/
81e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_shl (Word32 L_var1, Word16 var2);    	 	 	/* Long shift left, 2 */
82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_shr (Word32 L_var1, Word16 var2);    	 	 	/* Long shift right, 2*/
83e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_shr_r (Word32 L_var1, Word16 var2); 				/* Long shift right with round,  3   */
84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 norm_s (Word16 var1);             				/* Short norm,           15  */
85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 div_s (Word16 var1, Word16 var2); 				/* Short division,       18  */
86b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgardstatic_vo Word16 norm_l (Word32 L_var1);           				/* Long norm,            30  */
87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
89e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
90e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Functions                                                               |
91e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
92e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
93e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
94e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : add                                                     |
96e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
99e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    Performs the addition (var1+var2) with overflow control and saturation;|
100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    the 16 bit result is set at +32767 when overflow occurs or at -32768   |
101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    when underflow occurs.                                                 |
102e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 1                                                   |
104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var1                                                                   |
108e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
110e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
111e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var2                                                                   |
112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
113e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
114e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
115e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
116e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
117e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
118e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
119e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
120e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
121e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var_out                                                                |
122e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
123e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
124e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
125e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
126e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 add (Word16 var1, Word16 var2)
127e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
128e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word16 var_out;
129e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_sum;
130e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_sum = (Word32) var1 + var2;
131e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	var_out = saturate (L_sum);
132e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (var_out);
133e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
134e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
135e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
136e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
137e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : sub                                                     |
138e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
139e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
140e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
141e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    Performs the subtraction (var1+var2) with overflow control and satu-   |
142e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    ration; the 16 bit result is set at +32767 when overflow occurs or at  |
143e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    -32768 when underflow occurs.                                          |
144e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
145e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 1                                                   |
146e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
147e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
148e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
149e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var1                                                                   |
150e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
151e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
152e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
153e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var2                                                                   |
154e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
155e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
156e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
157e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
158e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
159e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
160e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
161e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
162e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
163e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var_out                                                                |
164e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
165e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
166e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
167e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
168e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
169e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 sub (Word16 var1, Word16 var2)
170e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
171e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word16 var_out;
172e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_diff;
173e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_diff = (Word32) var1 - var2;
174e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	var_out = saturate (L_diff);
175e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (var_out);
176e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
177e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
178e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
179e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
180e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : shl                                                     |
181e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
182e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
183e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
184e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Arithmetically shift the 16 bit input var1 left var2 positions.Zero fill|
185e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   the var2 LSB of the result. If var2 is negative, arithmetically shift   |
186e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   var1 right by -var2 with sign extension. Saturate the result in case of |
187e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   underflows or overflows.                                                |
188e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
189e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 1                                                   |
190e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
191e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
192e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
193e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var1                                                                   |
194e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
195e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
196e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
197e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var2                                                                   |
198e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
199e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
200e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
201e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
202e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
203e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
204e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
205e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
206e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
207e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var_out                                                                |
208e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
209e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
210e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
211e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
212e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
213e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 shl (Word16 var1, Word16 var2)
214e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
215e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word16 var_out;
216e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 result;
217e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if (var2 < 0)
218e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
219e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		if (var2 < -16)
220e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			var2 = -16;
221e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		var_out = var1 >> ((Word16)-var2);
222e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
223e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	else
224e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
225e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		result = (Word32) var1 *((Word32) 1 << var2);
226e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		if ((var2 > 15 && var1 != 0) || (result != (Word32) ((Word16) result)))
227e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
228e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			var_out = (Word16)((var1 > 0) ? MAX_16 : MIN_16);
229e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
230e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		else
231e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
232e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			var_out = extract_l (result);
233e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
234e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
235e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (var_out);
236e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
237e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
238e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
239e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
240e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : shr                                                     |
241e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
242e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
243e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
244e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Arithmetically shift the 16 bit input var1 right var2 positions with    |
245e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   sign extension. If var2 is negative, arithmetically shift var1 left by  |
246e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   -var2 with sign extension. Saturate the result in case of underflows or |
247e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   overflows.                                                              |
248e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
249e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 1                                                   |
250e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
251e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
252e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
253e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var1                                                                   |
254e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
255e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
256e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
257e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var2                                                                   |
258e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
259e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
260e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
261e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
262e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
263e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
264e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
265e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
266e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
267e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var_out                                                                |
268e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
269e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
270e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
271e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
272e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
273e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 shr (Word16 var1, Word16 var2)
274e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
275e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word16 var_out;
276e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if (var2 < 0)
277e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
278e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		if (var2 < -16)
279e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			var2 = -16;
280e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		var_out = shl(var1, (Word16)-var2);
281e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
282e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	else
283e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
284e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		if (var2 >= 15)
285e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
286e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			var_out = (Word16)((var1 < 0) ? -1 : 0);
287e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
288e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		else
289e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
290e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			if (var1 < 0)
291e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			{
292e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				var_out = (Word16)(~((~var1) >> var2));
293e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			}
294e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			else
295e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			{
296e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				var_out = (Word16)(var1 >> var2);
297e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			}
298e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
299e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
300e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (var_out);
301e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
302e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
303e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
304e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
305e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : mult                                                    |
306e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
307e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
308e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
309e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    Performs the multiplication of var1 by var2 and gives a 16 bit result  |
310e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    which is scaled i.e.:                                                  |
311e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             mult(var1,var2) = extract_l(L_shr((var1 times var2),15)) and  |
312e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             mult(-32768,-32768) = 32767.                                  |
313e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
314e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 1                                                   |
315e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
316e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
317e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
318e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var1                                                                   |
319e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
320e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
321e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
322e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var2                                                                   |
323e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
324e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
325e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
326e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
327e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
328e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
329e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
330e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
331e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
332e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var_out                                                                |
333e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
334e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
335e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
336e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
337e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
338e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 mult (Word16 var1, Word16 var2)
339e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
340e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word16 var_out;
341e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_product;
342e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_product = (Word32) var1 *(Word32) var2;
343e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_product = (L_product & (Word32) 0xffff8000L) >> 15;
344e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if (L_product & (Word32) 0x00010000L)
345e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		L_product = L_product | (Word32) 0xffff0000L;
346e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	var_out = saturate (L_product);
347e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (var_out);
348e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
349e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
350e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
351e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
352e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : L_mult                                                  |
353e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
354e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
355e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
356e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   L_mult is the 32 bit result of the multiplication of var1 times var2    |
357e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   with one shift left i.e.:                                               |
358e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|        L_mult(var1,var2) = L_shl((var1 times var2),1) and                   |
359e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|        L_mult(-32768,-32768) = 2147483647.                                |
360e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
361e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 1                                                   |
362e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
363e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
364e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
365e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var1                                                                   |
366e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
367e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
368e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
369e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var2                                                                   |
370e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
371e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
372e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
373e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
374e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
375e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
376e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
377e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
378e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
379e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var_out                                                              |
380e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             32 bit long signed integer (Word32) whose value falls in the  |
381e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
382e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
383e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
384e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
385e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_mult (Word16 var1, Word16 var2)
386e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
387e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_var_out;
388e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_var_out = (Word32) var1 *(Word32) var2;
389e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if (L_var_out != (Word32) 0x40000000L)
390e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
391e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		L_var_out *= 2;
392e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
393e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	else
394e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
395e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		L_var_out = MAX_32;
396e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
397e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (L_var_out);
398e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
399e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
400e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
401e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
402e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : round                                                   |
403e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
404e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
405e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
406e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Round the lower 16 bits of the 32 bit input number into the MS 16 bits  |
407e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   with saturation. Shift the resulting bits right by 16 and return the 16 |
408e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   bit number:                                                             |
409e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|               round(L_var1) = extract_h(L_add(L_var1,32768))              |
410e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
411e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 1                                                   |
412e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
413e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
414e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
415e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var1                                                                 |
416e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             32 bit long signed integer (Word32 ) whose value falls in the |
417e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |
418e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
419e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
420e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
421e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
422e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
423e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
424e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
425e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var_out                                                                |
426e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
427e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
428e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
429e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
430e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
431e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 voround (Word32 L_var1)
432e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
433e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word16 var_out;
434e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_rounded;
435e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_rounded = L_add (L_var1, (Word32) 0x00008000L);
436e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	var_out = extract_h (L_rounded);
437e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (var_out);
438e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
439e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
440e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
441e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
442e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : L_mac                                                   |
443e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
444e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
445e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
446e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Multiply var1 by var2 and shift the result left by 1. Add the 32 bit    |
447e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   result to L_var3 with saturation, return a 32 bit result:               |
448e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|        L_mac(L_var3,var1,var2) = L_add(L_var3,L_mult(var1,var2)).         |
449e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
450e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 1                                                   |
451e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
452e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
453e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
454e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var3   32 bit long signed integer (Word32) whose value falls in the  |
455e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
456e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
457e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var1                                                                   |
458e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
459e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
460e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
461e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var2                                                                   |
462e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
463e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
464e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
465e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
466e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
467e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
468e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
469e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
470e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
471e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var_out                                                              |
472e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             32 bit long signed integer (Word32) whose value falls in the  |
473e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
474e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
475e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
476e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
477e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2)
478e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
479e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_var_out;
480e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_product;
481e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_product = ((var1 * var2) << 1);
482e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_var_out = L_add (L_var3, L_product);
483e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (L_var_out);
484e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
485e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
486e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
487e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
488e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : L_msu                                                   |
489e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
490e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
491e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
492e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Multiply var1 by var2 and shift the result left by 1. Subtract the 32   |
493e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   bit result to L_var3 with saturation, return a 32 bit result:           |
494e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|        L_msu(L_var3,var1,var2) = L_sub(L_var3,L_mult(var1,var2)).         |
495e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
496e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 1                                                   |
497e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
498e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
499e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
500e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var3   32 bit long signed integer (Word32) whose value falls in the  |
501e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
502e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
503e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var1                                                                   |
504e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
505e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
506e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
507e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var2                                                                   |
508e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
509e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
510e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
511e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
512e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
513e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
514e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
515e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
516e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
517e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var_out                                                              |
518e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             32 bit long signed integer (Word32) whose value falls in the  |
519e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
520e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
521e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
522e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
523e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2)
524e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
525e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_var_out;
526e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_product;
527e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_product = (var1 * var2)<<1;
528e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_var_out = L_sub (L_var3, L_product);
529e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (L_var_out);
530e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
531e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
532e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
533e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
534e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : L_add                                                   |
535e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
536e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
537e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
538e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   32 bits addition of the two 32 bits variables (L_var1+L_var2) with      |
539e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   overflow control and saturation; the result is set at +2147483647 when  |
540e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   overflow occurs or at -2147483648 when underflow occurs.                |
541e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
542e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 2                                                   |
543e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
544e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
545e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
546e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
547e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
548e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
549e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var2   32 bit long signed integer (Word32) whose value falls in the  |
550e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
551e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
552e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
553e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
554e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
555e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
556e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
557e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
558e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var_out                                                              |
559e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             32 bit long signed integer (Word32) whose value falls in the  |
560e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
561e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
562e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
563e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
564e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_add (Word32 L_var1, Word32 L_var2)
565e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
566e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_var_out;
567e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_var_out = L_var1 + L_var2;
568e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if (((L_var1 ^ L_var2) & MIN_32) == 0)
569e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
570e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		if ((L_var_out ^ L_var1) & MIN_32)
571e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
572e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			L_var_out = (L_var1 < 0) ? MIN_32 : MAX_32;
573e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
574e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
575e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (L_var_out);
576e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
577e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
578e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
579e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
580e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : L_sub                                                   |
581e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
582e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
583e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
584e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   32 bits subtraction of the two 32 bits variables (L_var1-L_var2) with   |
585e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   overflow control and saturation; the result is set at +2147483647 when  |
586e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   overflow occurs or at -2147483648 when underflow occurs.                |
587e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
588e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 2                                                   |
589e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
590e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
591e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
592e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
593e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
594e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
595e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var2   32 bit long signed integer (Word32) whose value falls in the  |
596e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
597e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
598e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
599e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
600e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
601e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
602e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
603e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
604e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var_out                                                              |
605e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             32 bit long signed integer (Word32) whose value falls in the  |
606e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
607e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
608e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
609e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
610e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_sub (Word32 L_var1, Word32 L_var2)
611e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
612e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_var_out;
613e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_var_out = L_var1 - L_var2;
614e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if (((L_var1 ^ L_var2) & MIN_32) != 0)
615e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
616e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		if ((L_var_out ^ L_var1) & MIN_32)
617e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
618e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			L_var_out = (L_var1 < 0L) ? MIN_32 : MAX_32;
619e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
620e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
621e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (L_var_out);
622e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
623e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
624e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
625e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
626e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
627e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : mult_r                                                  |
628e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
629e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
630e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
631e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Same as mult with rounding, i.e.:                                       |
632e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|     mult_r(var1,var2) = extract_l(L_shr(((var1 * var2) + 16384),15)) and  |
633e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|     mult_r(-32768,-32768) = 32767.                                        |
634e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
635e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 2                                                   |
636e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
637e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
638e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
639e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var1                                                                   |
640e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
641e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
642e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
643e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var2                                                                   |
644e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
645e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
646e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
647e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
648e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
649e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
650e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
651e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
652e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
653e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var_out                                                                |
654e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
655e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
656e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
657e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
658e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
659e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 mult_r (Word16 var1, Word16 var2)
660e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
661e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word16 var_out;
662e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_product_arr;
663e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_product_arr = (Word32) var1 *(Word32) var2;       /* product */
664e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_product_arr += (Word32) 0x00004000L;      /* round */
665e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_product_arr &= (Word32) 0xffff8000L;
666e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	L_product_arr >>= 15;       /* shift */
667e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if (L_product_arr & (Word32) 0x00010000L)   /* sign extend when necessary */
668e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
669e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		L_product_arr |= (Word32) 0xffff0000L;
670e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
671e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	var_out = saturate (L_product_arr);
672e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (var_out);
673e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
674e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
675e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
676e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
677e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : L_shl                                                   |
678e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
679e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
680e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
681e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Arithmetically shift the 32 bit input L_var1 left var2 positions. Zero  |
682e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   fill the var2 LSB of the result. If var2 is negative, arithmetically    |
683e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   shift L_var1 right by -var2 with sign extension. Saturate the result in |
684e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   case of underflows or overflows.                                        |
685e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
686e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 2                                                   |
687e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
688e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
689e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
690e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
691e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
692e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
693e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var2                                                                   |
694e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
695e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
696e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
697e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
698e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
699e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
700e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
701e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
702e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
703e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var_out                                                              |
704e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             32 bit long signed integer (Word32) whose value falls in the  |
705e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
706e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
707e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
708e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
709e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_shl (Word32 L_var1, Word16 var2)
710e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
711e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_var_out = 0L;
712e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if (var2 <= 0)
713e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
714e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		if (var2 < -32)
715e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			var2 = -32;
716e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		L_var_out = (L_var1 >> (Word16)-var2);
717e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
718e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	else
719e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
720e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		for (; var2 > 0; var2--)
721e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
722e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			if (L_var1 > (Word32) 0X3fffffffL)
723e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			{
724e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				L_var_out = MAX_32;
725e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				break;
726e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			}
727e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			else
728e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			{
729e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				if (L_var1 < (Word32) 0xc0000000L)
730e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				{
731e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard					//Overflow = 1;
732e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard					L_var_out = MIN_32;
733e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard					break;
734e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				}
735e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			}
736e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			L_var1 *= 2;
737e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			L_var_out = L_var1;
738e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
739e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
740e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (L_var_out);
741e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
742e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
743e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_shl2(Word32 L_var1, Word16 var2)
744e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
745e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_var_out = 0L;
746e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
747e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	for (; var2 > 0; var2--)
748e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
749e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		if (L_var1 > (Word32) 0X3fffffffL)
750e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
751e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			L_var_out = MAX_32;
752e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			break;
753e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
754e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		else
755e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
756e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			if (L_var1 < (Word32) 0xc0000000L)
757e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			{
758e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				L_var_out = MIN_32;
759e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				break;
760e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			}
761e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
762e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		L_var1 <<=1 ;
763e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		L_var_out = L_var1;
764e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
765e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (L_var_out);
766e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
767e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
768e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
769e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
770e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : L_shr                                                   |
771e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
772e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
773e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
774e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Arithmetically shift the 32 bit input L_var1 right var2 positions with  |
775e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   sign extension. If var2 is negative, arithmetically shift L_var1 left   |
776e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   by -var2 and zero fill the -var2 LSB of the result. Saturate the result |
777e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   in case of underflows or overflows.                                     |
778e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
779e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 2                                                   |
780e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
781e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
782e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
783e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
784e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
785e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
786e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var2                                                                   |
787e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
788e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
789e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
790e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
791e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
792e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
793e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
794e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
795e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
796e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var_out                                                              |
797e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             32 bit long signed integer (Word32) whose value falls in the  |
798e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
799e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
800e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
801e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
802e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_shr (Word32 L_var1, Word16 var2)
803e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
804e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_var_out;
805e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if (var2 < 0)
806e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
807e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		if (var2 < -32)
808e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			var2 = -32;
809e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		L_var_out = L_shl2(L_var1, (Word16)-var2);
810e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
811e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	else
812e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
813e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		if (var2 >= 31)
814e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
815e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			L_var_out = (L_var1 < 0L) ? -1 : 0;
816e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
817e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		else
818e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
819e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			if (L_var1 < 0)
820e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			{
821e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				L_var_out = ~((~L_var1) >> var2);
822e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			}
823e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			else
824e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			{
825e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				L_var_out = L_var1 >> var2;
826e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			}
827e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
828e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
829e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (L_var_out);
830e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
831e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
832e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
833e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
834e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : L_shr_r                                                 |
835e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
836e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
837e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
838e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Same as L_shr(L_var1,var2) but with rounding. Saturate the result in    |
839e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   case of underflows or overflows :                                       |
840e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    - If var2 is greater than zero :                                       |
841e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|          if (L_sub(L_shl(L_shr(L_var1,var2),1),L_shr(L_var1,sub(var2,1))))|
842e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|          is equal to zero                                                 |
843e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                     then                                                  |
844e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                     L_shr_r(L_var1,var2) = L_shr(L_var1,var2)             |
845e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                     else                                                  |
846e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                     L_shr_r(L_var1,var2) = L_add(L_shr(L_var1,var2),1)    |
847e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    - If var2 is less than or equal to zero :                              |
848e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                     L_shr_r(L_var1,var2) = L_shr(L_var1,var2).            |
849e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
850e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 3                                                   |
851e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
852e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
853e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
854e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var1                                                                 |
855e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             32 bit long signed integer (Word32) whose value falls in the  |
856e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |
857e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
858e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var2                                                                   |
859e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
860e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
861e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
862e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
863e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
864e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
865e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
866e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
867e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
868e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var_out                                                              |
869e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             32 bit long signed integer (Word32) whose value falls in the  |
870e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= var_out <= 0x7fff ffff.                |
871e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
872e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
873e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
874e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word32 L_shr_r (Word32 L_var1, Word16 var2)
875e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
876e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_var_out;
877e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if (var2 > 31)
878e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
879e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		L_var_out = 0;
880e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
881e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	else
882e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
883e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		L_var_out = L_shr (L_var1, var2);
884e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		if (var2 > 0)
885e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
886e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			if ((L_var1 & ((Word32) 1 << (var2 - 1))) != 0)
887e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			{
888e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				L_var_out++;
889e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			}
890e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
891e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
892e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (L_var_out);
893e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
894e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
895e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
896e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
897e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : norm_s                                                  |
898e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
899e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
900e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
901e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Produces the number of left shift needed to normalize the 16 bit varia- |
902e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   ble var1 for positive values on the interval with minimum of 16384 and  |
903e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   maximum of 32767, and for negative values on the interval with minimum  |
904e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   of -32768 and maximum of -16384; in order to normalize the result, the  |
905e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   following operation must be done :                                      |
906e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                    norm_var1 = shl(var1,norm_s(var1)).                    |
907e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
908e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 15                                                  |
909e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
910e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
911e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
912e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var1                                                                   |
913e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
914e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
915e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
916e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
917e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
918e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
919e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
920e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
921e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
922e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var_out                                                                |
923e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
924e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x0000 0000 <= var_out <= 0x0000 000f.                |
925e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
926e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
927e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
928e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 norm_s (Word16 var1)
929e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
930e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word16 var_out = 0;
931e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if (var1 == 0)
932e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
933e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		var_out = 0;
934e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
935e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	else
936e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
937e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		if (var1 == -1)
938e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
939e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			var_out = 15;
940e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
941e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		else
942e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
943e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			if (var1 < 0)
944e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			{
945e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				var1 = (Word16)~var1;
946e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			}
947e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			for (var_out = 0; var1 < 0x4000; var_out++)
948e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			{
949e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				var1 <<= 1;
950e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			}
951e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
952e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
953e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (var_out);
954e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
955e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
956e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
957e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
958e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : div_s                                                   |
959e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
960e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
961e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
962e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Produces a result which is the fractional integer division of var1  by  |
963e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   var2; var1 and var2 must be positive and var2 must be greater or equal  |
964e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   to var1; the result is positive (leading bit equal to 0) and truncated  |
965e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   to 16 bits.                                                             |
966e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   If var1 = var2 then div(var1,var2) = 32767.                             |
967e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
968e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 18                                                  |
969e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
970e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
971e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
972e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var1                                                                   |
973e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
974e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x0000 0000 <= var1 <= var2 and var2 != 0.            |
975e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
976e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var2                                                                   |
977e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
978e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : var1 <= var2 <= 0x0000 7fff and var2 != 0.            |
979e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
980e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
981e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
982e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
983e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
984e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
985e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
986e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var_out                                                                |
987e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
988e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x0000 0000 <= var_out <= 0x0000 7fff.                |
989e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             It's a Q15 value (point between b15 and b14).                 |
990e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
991e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
992e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
993e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 div_s (Word16 var1, Word16 var2)
994e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
995e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word16 var_out = 0;
996e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word16 iteration;
997e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_num;
998e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word32 L_denom;
999e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if ((var1 < 0) || (var2 < 0))
1000e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
1001e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		var_out = MAX_16;
1002e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		return var_out;
1003e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
1004e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if (var2 == 0)
1005e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
1006e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		var_out = MAX_16;
1007e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		return var_out;
1008e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
1009e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if (var1 == 0)
1010e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
1011e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		var_out = 0;
1012e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
1013e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	else
1014e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
1015e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		if (var1 == var2)
1016e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
1017e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			var_out = MAX_16;
1018e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
1019e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		else
1020e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
1021e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			L_num = L_deposit_l (var1);
1022e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			L_denom = L_deposit_l(var2);
1023e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			for (iteration = 0; iteration < 15; iteration++)
1024e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			{
1025e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				var_out <<= 1;
1026e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				L_num <<= 1;
1027e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				if (L_num >= L_denom)
1028e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				{
1029b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard					L_num -= L_denom;
1030b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard					var_out += 1;
1031e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				}
1032e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			}
1033e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
1034e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
1035e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (var_out);
1036e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1037e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1038e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*___________________________________________________________________________
1039e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
1040e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Function Name : norm_l                                                  |
1041e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
1042e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Purpose :                                                               |
1043e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
1044e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Produces the number of left shifts needed to normalize the 32 bit varia-|
1045e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   ble L_var1 for positive values on the interval with minimum of          |
1046e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   1073741824 and maximum of 2147483647, and for negative values on the in-|
1047e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   terval with minimum of -2147483648 and maximum of -1073741824; in order |
1048e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   to normalize the result, the following operation must be done :         |
1049e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                   norm_L_var1 = L_shl(L_var1,norm_l(L_var1)).             |
1050e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
1051e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Complexity weight : 30                                                  |
1052e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
1053e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Inputs :                                                                |
1054e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
1055e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    L_var1                                                                 |
1056e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             32 bit long signed integer (Word32) whose value falls in the  |
1057e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |
1058e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
1059e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Outputs :                                                               |
1060e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
1061e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    none                                                                   |
1062e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
1063e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|   Return Value :                                                          |
1064e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|                                                                           |
1065e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|    var_out                                                                |
1066e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             16 bit short signed integer (Word16) whose value falls in the |
1067e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|             range : 0x0000 0000 <= var_out <= 0x0000 001f.                |
1068e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard|___________________________________________________________________________|
1069e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/
1070e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1071e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic_vo Word16 norm_l (Word32 L_var1)
1072e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{
1073e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Word16 var_out = 0;
1074e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	if (L_var1 != 0)
1075e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	{
1076e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		var_out = 31;
1077e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		if (L_var1 != (Word32) 0xffffffffL)
1078e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		{
1079e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			L_var1 ^= (L_var1 >>31);
1080e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			for (var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++)
1081e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			{
1082e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard				L_var1 <<= 1;
1083e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard			}
1084e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard		}
1085e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	}
1086e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	return (var_out);
1087e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}
1088e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1089e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif //__BASIC_OP_H__
1090e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
1091