]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/Include/X64/ProcessorBind.h
BaseTools/CommonLib: drop the use of MAX_ADDRESS
[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
f7496d71 4 Copyright (c) 2006 - 2018, 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
97fa0ee9 8 distribution. The full text of the license may be found at\r
30fdf114
LG
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
30fdf114
LG
14**/\r
15\r
16#ifndef __PROCESSOR_BIND_H__\r
17#define __PROCESSOR_BIND_H__\r
18\r
19//\r
20// Define the processor type so other code can make processor based choices\r
21//\r
22#define MDE_CPU_X64\r
23\r
24\r
25//\r
26// Make sure we are useing the correct packing rules per EFI specification\r
27//\r
a709adfa 28#ifndef __GNUC__\r
30fdf114 29#pragma pack()\r
a709adfa 30#endif\r
30fdf114
LG
31\r
32\r
f7496d71
LG
33#if _MSC_EXTENSIONS\r
34\r
30fdf114
LG
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
57// ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning\r
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
f7496d71
LG
69\r
70 #if _MSC_EXTENSIONS\r
71\r
30fdf114
LG
72\r
73 //\r
f7496d71 74 // use Microsoft C complier dependent integer width types\r
30fdf114
LG
75 //\r
76 typedef unsigned __int64 UINT64;\r
77 typedef __int64 INT64;\r
78 typedef unsigned __int32 UINT32;\r
79 typedef __int32 INT32;\r
80 typedef unsigned short UINT16;\r
81 typedef unsigned short CHAR16;\r
82 typedef short INT16;\r
83 typedef unsigned char BOOLEAN;\r
84 typedef unsigned char UINT8;\r
85 typedef char CHAR8;\r
86 typedef char INT8;\r
87 #else\r
f7496d71 88 #ifdef _EFI_P64\r
30fdf114 89 //\r
f7496d71 90 // P64 - is Intel Itanium(TM) speak for pointers being 64-bit and longs and ints\r
30fdf114
LG
91 // are 32-bits\r
92 //\r
93 typedef unsigned long long UINT64;\r
94 typedef long long INT64;\r
95 typedef unsigned int UINT32;\r
96 typedef int INT32;\r
97 typedef unsigned short CHAR16;\r
98 typedef unsigned short UINT16;\r
99 typedef short INT16;\r
100 typedef unsigned char BOOLEAN;\r
101 typedef unsigned char UINT8;\r
102 typedef char CHAR8;\r
103 typedef char INT8;\r
104 #else\r
105 //\r
106 // Assume LP64 - longs and pointers are 64-bit. Ints are 32-bit.\r
107 //\r
108 typedef unsigned long UINT64;\r
109 typedef long INT64;\r
110 typedef unsigned int UINT32;\r
111 typedef int INT32;\r
112 typedef unsigned short UINT16;\r
113 typedef unsigned short CHAR16;\r
114 typedef short INT16;\r
115 typedef unsigned char BOOLEAN;\r
116 typedef unsigned char UINT8;\r
117 typedef char CHAR8;\r
118 typedef char INT8;\r
119 #endif\r
120 #endif\r
121\r
122 #define UINT8_MAX 0xff\r
123\r
124#else\r
125 //\r
126 // Use ANSI C 2000 stdint.h integer width declarations\r
127 //\r
128 #include <stdint.h>\r
129 typedef uint8_t BOOLEAN;\r
130 typedef int8_t INT8;\r
131 typedef uint8_t UINT8;\r
132 typedef int16_t INT16;\r
133 typedef uint16_t UINT16;\r
134 typedef int32_t INT32;\r
135 typedef uint32_t UINT32;\r
136 typedef int64_t INT64;\r
137 typedef uint64_t UINT64;\r
138 typedef char CHAR8;\r
139 typedef uint16_t CHAR16;\r
140\r
141#endif\r
142\r
143typedef UINT64 UINTN;\r
144typedef INT64 INTN;\r
145\r
146\r
147//\r
148// Processor specific defines\r
149//\r
6780eef1
LG
150#define MAX_BIT 0x8000000000000000ULL\r
151#define MAX_2_BITS 0xC000000000000000ULL\r
30fdf114 152\r
30fdf114
LG
153//\r
154// Modifier to ensure that all protocol member functions and EFI intrinsics\r
155// use the correct C calling convention. All protocol member functions and\r
156// EFI intrinsics are required to modify thier member functions with EFIAPI.\r
157//\r
f7496d71 158#if _MSC_EXTENSIONS\r
30fdf114
LG
159 ///\r
160 /// Define the standard calling convention reguardless of optimization level.\r
161 /// __cdecl is Microsoft* specific C extension.\r
f7496d71
LG
162 ///\r
163 #define EFIAPI __cdecl\r
30fdf114
LG
164#elif __GNUC__\r
165 ///\r
166 /// Define the standard calling convention reguardless of optimization level.\r
167 /// efidecl is an extension to GCC that supports the differnece between x64\r
168 /// GCC ABI and x64 Microsoft* ABI. EFI is closer to the Microsoft* ABI and\r
f7496d71 169 /// EFIAPI makes sure the right ABI is used for public interfaces.\r
30fdf114
LG
170 /// eficecl is a work in progress and we do not yet have the compiler\r
171 ///\r
f7496d71 172 #define EFIAPI\r
30fdf114 173#else\r
f7496d71 174 #define EFIAPI\r
30fdf114
LG
175#endif\r
176\r
177//\r
178// The Microsoft* C compiler can removed references to unreferenced data items\r
f7496d71 179// if the /OPT:REF linker option is used. We defined a macro as this is a\r
30fdf114
LG
180// a non standard extension\r
181//\r
182#if _MSC_EXTENSIONS\r
183 #define GLOBAL_REMOVE_IF_UNREFERENCED __declspec(selectany)\r
184#else\r
185 #define GLOBAL_REMOVE_IF_UNREFERENCED\r
186#endif\r
187\r
188#endif\r
189\r