]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/Include/X64/ProcessorBind.h
Sync EDKII BaseTools to BaseTools project r1971
[mirror_edk2.git] / BaseTools / Source / C / Include / X64 / ProcessorBind.h
CommitLineData
30fdf114
LG
1/** @file\r
2 Processor or Compiler specific defines and types x64 (Intel(r) EM64T, AMD64).\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_X64\r
25\r
26\r
27//\r
28// Make sure we are useing the correct packing rules per EFI specification\r
29//\r
a709adfa 30#ifndef __GNUC__\r
30fdf114 31#pragma pack()\r
a709adfa 32#endif\r
30fdf114
LG
33\r
34\r
35#if _MSC_EXTENSIONS \r
36 \r
37//\r
38// Disable warning that make it impossible to compile at /W4\r
39// This only works for Microsoft* tools\r
40//\r
41\r
42//\r
43// Disabling bitfield type checking warnings.\r
44//\r
45#pragma warning ( disable : 4214 )\r
46\r
47//\r
48// Disabling the unreferenced formal parameter warnings.\r
49//\r
50#pragma warning ( disable : 4100 )\r
51\r
52//\r
53// Disable slightly different base types warning as CHAR8 * can not be set\r
54// to a constant string.\r
55//\r
56#pragma warning ( disable : 4057 )\r
57\r
58//\r
59// ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning\r
60//\r
61#pragma warning ( disable : 4127 )\r
62\r
63\r
64#endif\r
65\r
66\r
67#if !defined(__GNUC__) && (__STDC_VERSION__ < 199901L)\r
68 //\r
69 // No ANSI C 2000 stdint.h integer width declarations, so define equivalents\r
70 //\r
71 \r
72 #if _MSC_EXTENSIONS \r
73 \r
74\r
75 //\r
76 // use Microsoft C complier dependent interger width types \r
77 //\r
78 typedef unsigned __int64 UINT64;\r
79 typedef __int64 INT64;\r
80 typedef unsigned __int32 UINT32;\r
81 typedef __int32 INT32;\r
82 typedef unsigned short UINT16;\r
83 typedef unsigned short CHAR16;\r
84 typedef short INT16;\r
85 typedef unsigned char BOOLEAN;\r
86 typedef unsigned char UINT8;\r
87 typedef char CHAR8;\r
88 typedef char INT8;\r
89 #else\r
90 #ifdef _EFI_P64 \r
91 //\r
92 // P64 - is Intel Itanium(TM) speak for pointers being 64-bit and longs and ints \r
93 // are 32-bits\r
94 //\r
95 typedef unsigned long long UINT64;\r
96 typedef long long INT64;\r
97 typedef unsigned int UINT32;\r
98 typedef int INT32;\r
99 typedef unsigned short CHAR16;\r
100 typedef unsigned short UINT16;\r
101 typedef short INT16;\r
102 typedef unsigned char BOOLEAN;\r
103 typedef unsigned char UINT8;\r
104 typedef char CHAR8;\r
105 typedef char INT8;\r
106 #else\r
107 //\r
108 // Assume LP64 - longs and pointers are 64-bit. Ints are 32-bit.\r
109 //\r
110 typedef unsigned long UINT64;\r
111 typedef long INT64;\r
112 typedef unsigned int UINT32;\r
113 typedef int INT32;\r
114 typedef unsigned short UINT16;\r
115 typedef unsigned short CHAR16;\r
116 typedef short INT16;\r
117 typedef unsigned char BOOLEAN;\r
118 typedef unsigned char UINT8;\r
119 typedef char CHAR8;\r
120 typedef char INT8;\r
121 #endif\r
122 #endif\r
123\r
124 #define UINT8_MAX 0xff\r
125\r
126#else\r
127 //\r
128 // Use ANSI C 2000 stdint.h integer width declarations\r
129 //\r
130 #include <stdint.h>\r
131 typedef uint8_t BOOLEAN;\r
132 typedef int8_t INT8;\r
133 typedef uint8_t UINT8;\r
134 typedef int16_t INT16;\r
135 typedef uint16_t UINT16;\r
136 typedef int32_t INT32;\r
137 typedef uint32_t UINT32;\r
138 typedef int64_t INT64;\r
139 typedef uint64_t UINT64;\r
140 typedef char CHAR8;\r
141 typedef uint16_t CHAR16;\r
142\r
143#endif\r
144\r
145typedef UINT64 UINTN;\r
146typedef INT64 INTN;\r
147\r
148\r
149//\r
150// Processor specific defines\r
151//\r
152#define MAX_BIT 0x8000000000000000\r
153#define MAX_2_BITS 0xC000000000000000\r
154\r
155//\r
156// Maximum legal Itanium-based address\r
157//\r
158#define MAX_ADDRESS 0xFFFFFFFFFFFFFFFF\r
159\r
160//\r
161// Modifier to ensure that all protocol member functions and EFI intrinsics\r
162// use the correct C calling convention. All protocol member functions and\r
163// EFI intrinsics are required to modify thier member functions with EFIAPI.\r
164//\r
165#if _MSC_EXTENSIONS \r
166 ///\r
167 /// Define the standard calling convention reguardless of optimization level.\r
168 /// __cdecl is Microsoft* specific C extension.\r
169 /// \r
170 #define EFIAPI __cdecl \r
171#elif __GNUC__\r
172 ///\r
173 /// Define the standard calling convention reguardless of optimization level.\r
174 /// efidecl is an extension to GCC that supports the differnece between x64\r
175 /// GCC ABI and x64 Microsoft* ABI. EFI is closer to the Microsoft* ABI and\r
176 /// EFIAPI makes sure the right ABI is used for public interfaces. \r
177 /// eficecl is a work in progress and we do not yet have the compiler\r
178 ///\r
179 #define EFIAPI \r
180#else\r
181 #define EFIAPI \r
182#endif\r
183\r
184//\r
185// The Microsoft* C compiler can removed references to unreferenced data items\r
186// if the /OPT:REF linker option is used. We defined a macro as this is a \r
187// a non standard extension\r
188//\r
189#if _MSC_EXTENSIONS\r
190 #define GLOBAL_REMOVE_IF_UNREFERENCED __declspec(selectany)\r
191#else\r
192 #define GLOBAL_REMOVE_IF_UNREFERENCED\r
193#endif\r
194\r
195#endif\r
196\r