]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/Include/Ia32/ProcessorBind.h
Sync EDKII BaseTools to BaseTools project r1971
[mirror_edk2.git] / BaseTools / Source / C / Include / Ia32 / ProcessorBind.h
CommitLineData
30fdf114
LG
1/** @file\r
2 Processor or Compiler specific defines and types for x64.\r
3\r
40d841f6 4 Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>\r
30fdf114
LG
5\r
6 This program and the accompanying materials are licensed and made available\r
7 under the terms and conditions of the BSD License which accompanies this\r
8 distribution. The full text of the license may be found at:\r
9 http://opensource.org/licenses/bsd-license.php\r
10\r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14 File Name: ProcessorBind.h\r
15\r
16**/\r
17\r
18#ifndef __PROCESSOR_BIND_H__\r
19#define __PROCESSOR_BIND_H__\r
20\r
21//\r
22// Define the processor type so other code can make processor based choices\r
23//\r
24#define MDE_CPU_IA32\r
25\r
26//\r
27// Make sure we are useing the correct packing rules per EFI specification\r
28//\r
29#ifndef __GNUC__\r
30#pragma pack()\r
31#endif\r
32\r
33#if _MSC_EXTENSIONS\r
34\r
35//\r
36// Disable warning that make it impossible to compile at /W4\r
37// This only works for Microsoft* tools\r
38//\r
39\r
40//\r
41// Disabling bitfield type checking warnings.\r
42//\r
43#pragma warning ( disable : 4214 )\r
44\r
45//\r
46// Disabling the unreferenced formal parameter warnings.\r
47//\r
48#pragma warning ( disable : 4100 )\r
49\r
50//\r
51// Disable slightly different base types warning as CHAR8 * can not be set\r
52// to a constant string.\r
53//\r
54#pragma warning ( disable : 4057 )\r
55\r
56//\r
fd171542 57// ASSERT(FALSE) or while (TRUE) are legal constructs so suppress this warning\r
30fdf114
LG
58//\r
59#pragma warning ( disable : 4127 )\r
60\r
61\r
62#endif\r
63\r
64\r
65#if !defined(__GNUC__) && (__STDC_VERSION__ < 199901L)\r
66 //\r
67 // No ANSI C 2000 stdint.h integer width declarations, so define equivalents\r
68 //\r
69 \r
70 #if _MSC_EXTENSIONS \r
71 \r
72 //\r
73 // use Microsoft* C complier dependent interger width types \r
74 //\r
75 typedef unsigned __int64 UINT64;\r
76 typedef __int64 INT64;\r
77 typedef unsigned __int32 UINT32;\r
78 typedef __int32 INT32;\r
79 typedef unsigned short UINT16;\r
80 typedef unsigned short CHAR16;\r
81 typedef short INT16;\r
82 typedef unsigned char BOOLEAN;\r
83 typedef unsigned char UINT8;\r
84 typedef char CHAR8;\r
85 typedef char INT8;\r
86 #else\r
87\r
88 //\r
89 // Assume standard IA-32 alignment. \r
90 // BugBug: Need to check portability of long long\r
91 //\r
92 typedef unsigned long long UINT64;\r
93 typedef long long INT64;\r
94 typedef unsigned int UINT32;\r
95 typedef int INT32;\r
96 typedef unsigned short UINT16;\r
97 typedef unsigned short CHAR16;\r
98 typedef short INT16;\r
99 typedef unsigned char BOOLEAN;\r
100 typedef unsigned char UINT8;\r
101 typedef char CHAR8;\r
102 typedef char INT8;\r
103 #endif\r
104\r
105 #define UINT8_MAX 0xff\r
106\r
107#else\r
108 //\r
109 // Use ANSI C 2000 stdint.h integer width declarations\r
110 //\r
111 #include "stdint.h"\r
112 typedef uint8_t BOOLEAN;\r
113 typedef int8_t INT8;\r
114 typedef uint8_t UINT8;\r
115 typedef int16_t INT16;\r
116 typedef uint16_t UINT16;\r
117 typedef int32_t INT32;\r
118 typedef uint32_t UINT32;\r
119 typedef int64_t INT64;\r
120 typedef uint64_t UINT64;\r
121 typedef char CHAR8;\r
122 typedef uint16_t CHAR16;\r
123\r
124#endif\r
125\r
126typedef UINT32 UINTN;\r
127typedef INT32 INTN;\r
128\r
129\r
130//\r
131// Processor specific defines\r
132//\r
133#define MAX_BIT 0x80000000\r
134#define MAX_2_BITS 0xC0000000\r
135\r
136//\r
137// Maximum legal IA-32 address\r
138//\r
139#define MAX_ADDRESS 0xFFFFFFFF\r
140\r
141//\r
142// Modifier to ensure that all protocol member functions and EFI intrinsics\r
143// use the correct C calling convention. All protocol member functions and\r
fd171542 144// EFI intrinsics are required to modify their member functions with EFIAPI.\r
30fdf114
LG
145//\r
146#if _MSC_EXTENSIONS\r
147 //\r
148 // Microsoft* compiler requires _EFIAPI useage, __cdecl is Microsoft* specific C.\r
149 // \r
150 #define EFIAPI __cdecl \r
151#endif\r
152\r
153#if __GNUC__\r
154 #define EFIAPI __attribute__((cdecl)) \r
155#endif\r
156\r
157//\r
158// The Microsoft* C compiler can removed references to unreferenced data items\r
159// if the /OPT:REF linker option is used. We defined a macro as this is a \r
160// a non standard extension\r
161//\r
162#if _MSC_EXTENSIONS\r
163 #define GLOBAL_REMOVE_IF_UNREFERENCED __declspec(selectany)\r
164#else\r
165 #define GLOBAL_REMOVE_IF_UNREFERENCED\r
166#endif\r
167\r
168#endif\r