1 /*
2  ** Copyright 2003-2010, VisualOn, Inc.
3  **
4  ** Licensed under the Apache License, Version 2.0 (the "License");
5  ** you may not use this file except in compliance with the License.
6  ** You may obtain a copy of the License at
7  **
8  **     http://www.apache.org/licenses/LICENSE-2.0
9  **
10  ** Unless required by applicable law or agreed to in writing, software
11  ** distributed under the License is distributed on an "AS IS" BASIS,
12  ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  ** See the License for the specific language governing permissions and
14  ** limitations under the License.
15  */
16 /*******************************************************************************
17 	File:		typedefs.h
18 
19 	Content:	type defined or const defined
20 
21 *******************************************************************************/
22 
23 #ifndef typedefs_h
24 #define typedefs_h "$Id $"
25 
26 #ifndef CHAR_BIT
27 #define CHAR_BIT      8         /* number of bits in a char */
28 #endif
29 
30 #ifndef VOAAC_SHRT_MAX
31 #define VOAAC_SHRT_MAX    (32767)        /* maximum (signed) short value */
32 #endif
33 
34 #ifndef VOAAC_SHRT_MIN
35 #define VOAAC_SHRT_MIN    (-32768)        /* minimum (signed) short value */
36 #endif
37 
38 /* Define NULL pointer value */
39 #ifndef NULL
40 #ifdef __cplusplus
41 #define NULL    0
42 #else
43 #define NULL    ((void *)0)
44 #endif
45 #endif
46 
47 #ifndef assert
48 #define assert(_Expression)     ((void)0)
49 #endif
50 
51 #define __inline static __inline
52 
53 #define INT_BITS   32
54 /*
55 ********************************************************************************
56 *                         DEFINITION OF CONSTANTS
57 ********************************************************************************
58 */
59 /*
60  ********* define char type
61  */
62 typedef char Char;
63 
64 /*
65  ********* define 8 bit signed/unsigned types & constants
66  */
67 typedef signed char Word8;
68 typedef unsigned char UWord8;
69 /*
70  ********* define 16 bit signed/unsigned types & constants
71  */
72 typedef short Word16;
73 typedef unsigned short UWord16;
74 
75 /*
76  ********* define 32 bit signed/unsigned types & constants
77  */
78 typedef int Word32;
79 typedef unsigned int UWord32;
80 
81 
82 
83 #ifndef _MSC_VER
84 typedef long long Word64;
85 typedef unsigned long long UWord64;
86 #else
87 typedef __int64 Word64;
88 typedef unsigned __int64 UWord64;
89 #endif
90 
91 #ifndef min
92 #define min(a,b) ( a < b ? a : b)
93 #endif
94 
95 #ifndef max
96 #define max(a,b) ( a > b ? a : b)
97 #endif
98 
99 #ifdef ARM_INASM
100 #ifdef ARMV5_INASM
101 #define ARMV5E_INASM	1
102 #endif
103 #define ARMV4_INASM		1
104 #endif
105 
106 #if ARMV4_INASM
107 	#define ARMV5TE_SAT           1
108     #define ARMV5TE_ADD           1
109     #define ARMV5TE_SUB           1
110 	#define ARMV5TE_SHL           1
111     #define ARMV5TE_SHR           1
112 	#define ARMV5TE_L_SHL         1
113     #define ARMV5TE_L_SHR         1
114 #endif//ARMV4
115 #if ARMV5E_INASM
116     #define ARMV5TE_L_ADD         1
117     #define ARMV5TE_L_SUB         1
118     #define ARMV5TE_L_MULT        1
119     #define ARMV5TE_L_MAC         1
120     #define ARMV5TE_L_MSU         1
121 
122 
123     #define ARMV5TE_DIV_S         1
124     #define ARMV5TE_ROUND         1
125     #define ARMV5TE_MULT          1
126 
127     #define ARMV5TE_NORM_S        1
128     #define ARMV5TE_NORM_L        1
129 	#define ARMV5TE_L_MPY_LS	  1
130 #endif
131 #if ARMV6_INASM
132     #undef  ARMV5TE_ADD
133     #define ARMV5TE_ADD           0
134     #undef  ARMV5TE_SUB
135     #define ARMV5TE_SUB           0
136     #define ARMV6_SAT             1
137 #endif
138 
139 //basic operation functions optimization flags
140 #define SATRUATE_IS_INLINE              1   //define saturate as inline function
141 #define SHL_IS_INLINE                   1  //define shl as inline function
142 #define SHR_IS_INLINE                   1   //define shr as inline function
143 #define L_MULT_IS_INLINE                1   //define L_mult as inline function
144 #define L_MSU_IS_INLINE                 1   //define L_msu as inline function
145 #define L_SUB_IS_INLINE                 1   //define L_sub as inline function
146 #define L_SHL_IS_INLINE                 1   //define L_shl as inline function
147 #define L_SHR_IS_INLINE                 1   //define L_shr as inline function
148 #define ADD_IS_INLINE                   1   //define add as inline function //add, inline is the best
149 #define SUB_IS_INLINE                   1   //define sub as inline function //sub, inline is the best
150 #define DIV_S_IS_INLINE                 1   //define div_s as inline function
151 #define MULT_IS_INLINE                  1   //define mult as inline function
152 #define NORM_S_IS_INLINE                1   //define norm_s as inline function
153 #define NORM_L_IS_INLINE                1   //define norm_l as inline function
154 #define ROUND_IS_INLINE                 1   //define round as inline function
155 #define L_MAC_IS_INLINE                 1   //define L_mac as inline function
156 #define L_ADD_IS_INLINE                 1   //define L_add as inline function
157 #define EXTRACT_H_IS_INLINE             1   //define extract_h as inline function
158 #define EXTRACT_L_IS_INLINE             1   //define extract_l as inline function        //???
159 #define MULT_R_IS_INLINE                1   //define mult_r as inline function
160 #define SHR_R_IS_INLINE                 1   //define shr_r as inline function
161 #define MAC_R_IS_INLINE                 1   //define mac_r as inline function
162 #define MSU_R_IS_INLINE                 1   //define msu_r as inline function
163 #define L_SHR_R_IS_INLINE               1   //define L_shr_r as inline function
164 
165 #define PREFIX				voAACEnc
166 #define LINK0(x, y, z)		LINK1(x,y,z)
167 #define LINK1(x,y,z)		x##y##z
168 #define ADD_PREFIX(func)	LINK0(PREFIX, _, func)
169 
170 #define  L_Extract		ADD_PREFIX(L_Extract)
171 #define  L_Comp			ADD_PREFIX(L_Comp)
172 #define  Mpy_32			ADD_PREFIX(Mpy_32)
173 #define  Mpy_32_16		ADD_PREFIX(Mpy_32_16)
174 #define  Div_32			ADD_PREFIX(Div_32)
175 #define  iLog4			ADD_PREFIX(iLog4)
176 #define  rsqrt			ADD_PREFIX(rsqrt)
177 #define  pow2_xy		ADD_PREFIX(pow2_xy)
178 #define  L_mpy_ls		ADD_PREFIX(L_mpy_ls)
179 #define  L_mpy_wx		ADD_PREFIX(L_mpy_wx)
180 
181 #define mem_malloc		ADD_PREFIX(mem_malloc)
182 #define mem_free		ADD_PREFIX(mem_free)
183 
184 #endif
185