]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Include/Ia32/ProcessorBind.h
Remove __APPLE__ usage in ProcessorBind.h files.
[mirror_edk2.git] / MdePkg / Include / Ia32 / ProcessorBind.h
CommitLineData
959ccb23 1/** @file\r
d1057d4e 2 Processor or Compiler specific defines and types for Ia32 architecture.\r
959ccb23 3\r
6149e6bb 4 Copyright (c) 2006 - 2009, Intel Corporation<BR> \r
959ccb23 5 All rights reserved. This program and the accompanying materials \r
6 are licensed and made available under the terms and conditions of the BSD License \r
7 which accompanies this distribution. The full text of the license may be found at \r
8 http://opensource.org/licenses/bsd-license.php \r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
12\r
959ccb23 13**/\r
14\r
15#ifndef __PROCESSOR_BIND_H__\r
16#define __PROCESSOR_BIND_H__\r
17\r
3566565a 18///\r
19/// Define the processor type so other code can make processor based choices\r
20///\r
959ccb23 21#define MDE_CPU_IA32\r
22\r
23//\r
3963c4bf 24// Make sure we are using the correct packing rules per EFI specification\r
959ccb23 25//\r
5cfbd055 26#if !defined(__GNUC__)\r
959ccb23 27#pragma pack()\r
28#endif\r
29\r
5cfbd055 30#if defined(__INTEL_COMPILER)\r
ed300ce2 31//\r
32// Disable ICC's remark #869: "Parameter" was never referenced warning.\r
33// This is legal ANSI C code so we disable the remark that is turned on with -Wall\r
34//\r
35#pragma warning ( disable : 869 )\r
36\r
b483e395
A
37//\r
38// Disable ICC's remark #1418: external function definition with no prior declaration.\r
39// This is legal ANSI C code so we disable the remark that is turned on with /W4\r
40//\r
41#pragma warning ( disable : 1418 )\r
42\r
b483e395
A
43//\r
44// Disable ICC's remark #1419: external declaration in primary source file\r
45// This is legal ANSI C code so we disable the remark that is turned on with /W4\r
46//\r
47#pragma warning ( disable : 1419 )\r
48\r
49#endif\r
50\r
51\r
5cfbd055 52#if defined(_MSC_EXTENSIONS)\r
959ccb23 53\r
54//\r
55// Disable warning that make it impossible to compile at /W4\r
56// This only works for Microsoft* tools\r
57//\r
58\r
59//\r
60// Disabling bitfield type checking warnings.\r
61//\r
62#pragma warning ( disable : 4214 )\r
63\r
64//\r
65// Disabling the unreferenced formal parameter warnings.\r
66//\r
67#pragma warning ( disable : 4100 )\r
68\r
69//\r
70// Disable slightly different base types warning as CHAR8 * can not be set\r
71// to a constant string.\r
72//\r
73#pragma warning ( disable : 4057 )\r
74\r
75//\r
76// ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning\r
77//\r
78#pragma warning ( disable : 4127 )\r
79\r
80//\r
81// This warning is caused by functions defined but not used. For precompiled header only.\r
82//\r
83#pragma warning ( disable : 4505 )\r
84\r
85//\r
3963c4bf 86// This warning is caused by empty (after preprocessing) source file. For precompiled header only.\r
959ccb23 87//\r
88#pragma warning ( disable : 4206 )\r
89\r
90#endif\r
91\r
92\r
93#if !defined(__GNUC__) && (__STDC_VERSION__ < 199901L)\r
94 //\r
95 // No ANSI C 2000 stdint.h integer width declarations, so define equivalents\r
96 //\r
97 \r
5cfbd055 98 #if defined(_MSC_EXTENSIONS)\r
9510db65 99\r
959ccb23 100 //\r
f4ec40ab 101 // use Microsoft C complier dependent integer width types \r
959ccb23 102 //\r
f4ec40ab 103\r
104 ///\r
105 /// 8-byte unsigned value\r
106 ///\r
959ccb23 107 typedef unsigned __int64 UINT64;\r
f4ec40ab 108 ///\r
109 /// 8-byte signed value\r
110 ///\r
959ccb23 111 typedef __int64 INT64;\r
f4ec40ab 112 ///\r
113 /// 4-byte unsigned value\r
114 ///\r
959ccb23 115 typedef unsigned __int32 UINT32;\r
f4ec40ab 116 ///\r
117 /// 4-byte signed value\r
118 ///\r
959ccb23 119 typedef __int32 INT32;\r
f4ec40ab 120 ///\r
121 /// 2-byte unsigned value\r
122 ///\r
959ccb23 123 typedef unsigned short UINT16;\r
f4ec40ab 124 ///\r
125 /// 2-byte Character. Unless otherwise specified all strings are stored in the\r
126 /// UTF-16 encoding format as defined by Unicode 2.1 and ISO/IEC 10646 standards.\r
127 ///\r
959ccb23 128 typedef unsigned short CHAR16;\r
f4ec40ab 129 ///\r
130 /// 2-byte signed value\r
131 ///\r
959ccb23 132 typedef short INT16;\r
f4ec40ab 133 ///\r
134 /// Logical Boolean. 1-byte value containing 0 for FALSE or a 1 for TRUE. Other\r
135 /// values are undefined.\r
136 ///\r
959ccb23 137 typedef unsigned char BOOLEAN;\r
f4ec40ab 138 ///\r
139 /// 1-byte unsigned value\r
140 ///\r
959ccb23 141 typedef unsigned char UINT8;\r
f4ec40ab 142 ///\r
143 /// 1-byte Character\r
144 ///\r
959ccb23 145 typedef char CHAR8;\r
f4ec40ab 146 ///\r
147 /// 1-byte signed value\r
148 ///\r
959ccb23 149 typedef char INT8;\r
150 #else\r
151\r
152 //\r
153 // Assume standard IA-32 alignment. \r
154 // Need to check portability of long long\r
155 //\r
f4ec40ab 156\r
157 ///\r
158 /// 8-byte unsigned value\r
159 ///\r
959ccb23 160 typedef unsigned long long UINT64;\r
f4ec40ab 161 ///\r
162 /// 8-byte signed value\r
163 ///\r
959ccb23 164 typedef long long INT64;\r
f4ec40ab 165 ///\r
166 /// 4-byte unsigned value\r
167 ///\r
959ccb23 168 typedef unsigned int UINT32;\r
f4ec40ab 169 ///\r
170 /// 4-byte signed value\r
171 ///\r
959ccb23 172 typedef int INT32;\r
f4ec40ab 173 ///\r
174 /// 2-byte unsigned value\r
175 ///\r
959ccb23 176 typedef unsigned short UINT16;\r
f4ec40ab 177 ///\r
178 /// 2-byte Character. Unless otherwise specified all strings are stored in the\r
179 /// UTF-16 encoding format as defined by Unicode 2.1 and ISO/IEC 10646 standards.\r
180 ///\r
959ccb23 181 typedef unsigned short CHAR16;\r
f4ec40ab 182 ///\r
183 /// 2-byte signed value\r
184 ///\r
959ccb23 185 typedef short INT16;\r
f4ec40ab 186 ///\r
187 /// Logical Boolean. 1-byte value containing 0 for FALSE or a 1 for TRUE. Other\r
188 /// values are undefined.\r
189 ///\r
959ccb23 190 typedef unsigned char BOOLEAN;\r
f4ec40ab 191 ///\r
192 /// 1-byte unsigned value\r
193 ///\r
959ccb23 194 typedef unsigned char UINT8;\r
f4ec40ab 195 ///\r
196 /// 1-byte Character\r
197 ///\r
959ccb23 198 typedef char CHAR8;\r
f4ec40ab 199 ///\r
200 /// 1-byte signed value\r
201 ///\r
959ccb23 202 typedef char INT8;\r
203 #endif\r
959ccb23 204#else\r
205 //\r
206 // Use ANSI C 2000 stdint.h integer width declarations\r
207 //\r
f4ec40ab 208 #include <stdint.h>\r
209\r
210 ///\r
211 /// Logical Boolean. 1-byte value containing 0 for FALSE or a 1 for TRUE. Other\r
212 /// values are undefined.\r
213 ///\r
959ccb23 214 typedef uint8_t BOOLEAN;\r
f4ec40ab 215 ///\r
216 /// 1-byte signed value\r
217 ///\r
959ccb23 218 typedef int8_t INT8;\r
f4ec40ab 219 ///\r
220 /// 1-byte unsigned value\r
221 ///\r
959ccb23 222 typedef uint8_t UINT8;\r
f4ec40ab 223 ///\r
224 /// 2-byte signed value\r
225 ///\r
959ccb23 226 typedef int16_t INT16;\r
f4ec40ab 227 ///\r
228 /// 2-byte unsigned value\r
229 ///\r
959ccb23 230 typedef uint16_t UINT16;\r
f4ec40ab 231 ///\r
232 /// 4-byte signed value\r
233 ///\r
959ccb23 234 typedef int32_t INT32;\r
f4ec40ab 235 ///\r
236 /// 4-byte unsigned value\r
237 ///\r
959ccb23 238 typedef uint32_t UINT32;\r
f4ec40ab 239 ///\r
240 /// 8-byte signed value\r
241 ///\r
959ccb23 242 typedef int64_t INT64;\r
f4ec40ab 243 ///\r
244 /// 8-byte unsigned value\r
245 ///\r
959ccb23 246 typedef uint64_t UINT64;\r
f4ec40ab 247 ///\r
248 /// 1-byte Character\r
249 ///\r
959ccb23 250 typedef char CHAR8;\r
f4ec40ab 251 ///\r
252 /// 2-byte Character. Unless otherwise specified all strings are stored in the\r
253 /// UTF-16 encoding format as defined by Unicode 2.1 and ISO/IEC 10646 standards.\r
254 ///\r
959ccb23 255 typedef uint16_t CHAR16;\r
256\r
257#endif\r
258\r
f4ec40ab 259///\r
260/// Unsigned value of native width. (4 bytes on supported 32-bit processor instructions,\r
261/// 8 bytes on supported 64-bit processor instructions)\r
262///\r
959ccb23 263typedef UINT32 UINTN;\r
f4ec40ab 264///\r
265/// Signed value of native width. (4 bytes on supported 32-bit processor instructions,\r
266/// 8 bytes on supported 64-bit processor instructions)\r
267///\r
959ccb23 268typedef INT32 INTN;\r
269\r
f4ec40ab 270//\r
271// Processor specific defines\r
272//\r
959ccb23 273\r
3566565a 274///\r
f4ec40ab 275/// A value of native width with the highest bit set.\r
3566565a 276///\r
959ccb23 277#define MAX_BIT 0x80000000\r
f4ec40ab 278///\r
279/// A value of native width with the two highest bits set.\r
280///\r
959ccb23 281#define MAX_2_BITS 0xC0000000\r
282\r
3566565a 283///\r
284/// Maximum legal IA-32 address\r
285///\r
959ccb23 286#define MAX_ADDRESS 0xFFFFFFFF\r
287\r
3566565a 288///\r
289/// The stack alignment required for IA-32\r
290///\r
959ccb23 291#define CPU_STACK_ALIGNMENT sizeof(UINTN)\r
292\r
293//\r
294// Modifier to ensure that all protocol member functions and EFI intrinsics\r
295// use the correct C calling convention. All protocol member functions and\r
3963c4bf 296// EFI intrinsics are required to modify their member functions with EFIAPI.\r
959ccb23 297//\r
6149e6bb 298#ifdef EFIAPI\r
299 ///\r
300 /// If EFIAPI is already defined, then we use that definition.\r
301 ///\r
302#elif defined(_MSC_EXTENSIONS)\r
3566565a 303 ///\r
f4ec40ab 304 /// Microsoft* compiler specific method for EFIAPI calling convension\r
3566565a 305 /// \r
959ccb23 306 #define EFIAPI __cdecl \r
86b2b825 307#else\r
5cfbd055 308 #if defined(__GNUC__)\r
f4ec40ab 309 ///\r
310 /// GCC specific method for EFIAPI calling convension\r
311 /// \r
86b2b825 312 #define EFIAPI __attribute__((cdecl)) \r
313 #endif \r
959ccb23 314#endif\r
315\r
316//\r
317// The Microsoft* C compiler can removed references to unreferenced data items\r
318// if the /OPT:REF linker option is used. We defined a macro as this is a \r
319// a non standard extension\r
320//\r
5cfbd055 321#if defined(_MSC_EXTENSIONS)\r
f4ec40ab 322 ///\r
323 /// Remove global variable from the linked image if there are no references to \r
324 /// it after all compiler and linker optimizations have been performed.\r
325 ///\r
959ccb23 326 #define GLOBAL_REMOVE_IF_UNREFERENCED __declspec(selectany)\r
327#else\r
f4ec40ab 328 ///\r
329 /// Remove global variable from the linked image if there are no references to \r
330 /// it after all compiler and linker optimizations have been performed.\r
331 ///\r
959ccb23 332 #define GLOBAL_REMOVE_IF_UNREFERENCED\r
333#endif\r
334\r
27af6b87 335//\r
7b2cc549 336// Macros for GNU assembly code\r
27af6b87 337//\r
5cfbd055 338#if defined(__GNUC__)\r
ed0b86b1 339 #if defined(linux)\r
340 #define ASM_PFX(name) name\r
341 #else\r
342 #define ASM_PFX(name) _##name\r
343 #endif \r
7b2cc549 344 ///\r
345 /// For GNU assembly code, .global or .globl can declare global symbols.\r
346 /// Define this macro to unify the usage.\r
347 ///\r
348 #define ASM_GLOBAL .globl\r
27af6b87 349#endif\r
350\r
14996c96
LG
351/**\r
352 Return the pointer to the first instruction of a function given a function pointer.\r
353 On IA32 CPU architectures, these two pointer values are the same, \r
354 so the implementation of this macro is very simple.\r
355 \r
3963c4bf 356 @param FunctionPointer A pointer to a function.\r
14996c96
LG
357\r
358 @return The pointer to the first instruction of a function given a function pointer.\r
3963c4bf 359 \r
14996c96 360**/\r
9a1d00cb 361#define FUNCTION_ENTRY_POINT(FunctionPointer) (VOID *)(UINTN)(FunctionPointer)\r
24a7505c 362\r
959ccb23 363#endif\r
364\r