1959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang/** @file
21a2f870c9babe077c2d3abea23b6e8e044778341pkandel  Processor or Compiler specific defines and types for IA-32 architecture.
3959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
4a5077fd0d280b7160e14159144934b1d7391a045Shumin QiuCopyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
58c18db2750c60488f3889a0b6db96f746a66ccf7myronporterThis program and the accompanying materials are licensed and made available under
68c18db2750c60488f3889a0b6db96f746a66ccf7myronporterthe terms and conditions of the BSD License that accompanies this distribution.
78c18db2750c60488f3889a0b6db96f746a66ccf7myronporterThe full text of the license may be found at
88c18db2750c60488f3889a0b6db96f746a66ccf7myronporterhttp://opensource.org/licenses/bsd-license.php.
98c18db2750c60488f3889a0b6db96f746a66ccf7myronporter
108c18db2750c60488f3889a0b6db96f746a66ccf7myronporterTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
118c18db2750c60488f3889a0b6db96f746a66ccf7myronporterWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
13959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang**/
14959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
15959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#ifndef __PROCESSOR_BIND_H__
16959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define __PROCESSOR_BIND_H__
17959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
183566565aa46899c26d5d8243966643f9a89a2133klu///
198c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// Define the processor type so other code can make processor based choices.
203566565aa46899c26d5d8243966643f9a89a2133klu///
21959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MDE_CPU_IA32
22959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
23959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
243963c4bf44b14be594c4253d695652e077856773gikidy// Make sure we are using the correct packing rules per EFI specification
25959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
265cfbd055878dcca6f3e4081fc5c8805fd2ce7107klu#if !defined(__GNUC__)
27959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma pack()
28959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
29959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
305cfbd055878dcca6f3e4081fc5c8805fd2ce7107klu#if defined(__INTEL_COMPILER)
31b483e39524be82e44caa2804145415d17713a6a5AJFISH//
32ed300ce2a68ba42b7e140af9e7e71c706518c9f1jljusten// Disable ICC's remark #869: "Parameter" was never referenced warning.
33ed300ce2a68ba42b7e140af9e7e71c706518c9f1jljusten// This is legal ANSI C code so we disable the remark that is turned on with -Wall
34ed300ce2a68ba42b7e140af9e7e71c706518c9f1jljusten//
35ed300ce2a68ba42b7e140af9e7e71c706518c9f1jljusten#pragma warning ( disable : 869 )
36ed300ce2a68ba42b7e140af9e7e71c706518c9f1jljusten
37ed300ce2a68ba42b7e140af9e7e71c706518c9f1jljusten//
38b483e39524be82e44caa2804145415d17713a6a5AJFISH// Disable ICC's remark #1418: external function definition with no prior declaration.
39b483e39524be82e44caa2804145415d17713a6a5AJFISH// This is legal ANSI C code so we disable the remark that is turned on with /W4
40b483e39524be82e44caa2804145415d17713a6a5AJFISH//
41b483e39524be82e44caa2804145415d17713a6a5AJFISH#pragma warning ( disable : 1418 )
42b483e39524be82e44caa2804145415d17713a6a5AJFISH
43b483e39524be82e44caa2804145415d17713a6a5AJFISH//
44b483e39524be82e44caa2804145415d17713a6a5AJFISH// Disable ICC's remark #1419: external declaration in primary source file
45b483e39524be82e44caa2804145415d17713a6a5AJFISH// This is legal ANSI C code so we disable the remark that is turned on with /W4
46b483e39524be82e44caa2804145415d17713a6a5AJFISH//
47b483e39524be82e44caa2804145415d17713a6a5AJFISH#pragma warning ( disable : 1419 )
48b483e39524be82e44caa2804145415d17713a6a5AJFISH
498fe69f133e7e2ad9010f96002da41d0b325682c7eric_tian//
508fe69f133e7e2ad9010f96002da41d0b325682c7eric_tian// Disable ICC's remark #593: "Variable" was set but never used.
518fe69f133e7e2ad9010f96002da41d0b325682c7eric_tian// This is legal ANSI C code so we disable the remark that is turned on with /W4
528fe69f133e7e2ad9010f96002da41d0b325682c7eric_tian//
538fe69f133e7e2ad9010f96002da41d0b325682c7eric_tian#pragma warning ( disable : 593 )
548fe69f133e7e2ad9010f96002da41d0b325682c7eric_tian
55b483e39524be82e44caa2804145415d17713a6a5AJFISH#endif
56b483e39524be82e44caa2804145415d17713a6a5AJFISH
57b483e39524be82e44caa2804145415d17713a6a5AJFISH
585cfbd055878dcca6f3e4081fc5c8805fd2ce7107klu#if defined(_MSC_EXTENSIONS)
59959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
60959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
61959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Disable warning that make it impossible to compile at /W4
62959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// This only works for Microsoft* tools
63959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
64959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
65959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
66959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Disabling bitfield type checking warnings.
67959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
68959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4214 )
69959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
70959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
71959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Disabling the unreferenced formal parameter warnings.
72959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
73959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4100 )
74959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
75959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
76959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Disable slightly different base types warning as CHAR8 * can not be set
77959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// to a constant string.
78959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
79959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4057 )
80959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
81959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
82959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning
83959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
84959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4127 )
85959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
86959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
87959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// This warning is caused by functions defined but not used. For precompiled header only.
88959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
89959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4505 )
90959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
91959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
923963c4bf44b14be594c4253d695652e077856773gikidy// This warning is caused by empty (after preprocessing) source file. For precompiled header only.
93959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
94959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#pragma warning ( disable : 4206 )
95959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
96592a3790d8b39ed982216560b9608db71a758e83Liming Gao#if _MSC_VER == 1800 || _MSC_VER == 1900
97a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu
98a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu//
99a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu// Disable these warnings for VS2013.
100a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu//
101a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu
102a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu//
103a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu// This warning is for potentially uninitialized local variable, and it may cause false
104592a3790d8b39ed982216560b9608db71a758e83Liming Gao// positive issues in VS2013 and VS2015 build
105a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu//
106a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu#pragma warning ( disable : 4701 )
107a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu
108a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu//
109a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu// This warning is for potentially uninitialized local pointer variable, and it may cause
110592a3790d8b39ed982216560b9608db71a758e83Liming Gao// false positive issues in VS2013 and VS2015 build
111a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu//
112a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu#pragma warning ( disable : 4703 )
113a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu
114a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu#endif
115a5077fd0d280b7160e14159144934b1d7391a045Shumin Qiu
116959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
117959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
118959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
11952aa9e136bb99c9c09d37179765344278251c618geekboy#if defined(_MSC_EXTENSIONS)
120f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney
121959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  //
12252aa9e136bb99c9c09d37179765344278251c618geekboy  // use Microsoft C complier dependent integer width types
123959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  //
124f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney
125f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1268c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 8-byte unsigned value.
12752aa9e136bb99c9c09d37179765344278251c618geekboy  ///
12852aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned __int64    UINT64;
12952aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1308c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 8-byte signed value.
13152aa9e136bb99c9c09d37179765344278251c618geekboy  ///
13252aa9e136bb99c9c09d37179765344278251c618geekboy  typedef __int64             INT64;
13352aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1348c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 4-byte unsigned value.
13552aa9e136bb99c9c09d37179765344278251c618geekboy  ///
13652aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned __int32    UINT32;
13752aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1388c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 4-byte signed value.
13952aa9e136bb99c9c09d37179765344278251c618geekboy  ///
14052aa9e136bb99c9c09d37179765344278251c618geekboy  typedef __int32             INT32;
14152aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1428c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 2-byte unsigned value.
14352aa9e136bb99c9c09d37179765344278251c618geekboy  ///
14452aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned short      UINT16;
14552aa9e136bb99c9c09d37179765344278251c618geekboy  ///
14652aa9e136bb99c9c09d37179765344278251c618geekboy  /// 2-byte Character.  Unless otherwise specified all strings are stored in the
14752aa9e136bb99c9c09d37179765344278251c618geekboy  /// UTF-16 encoding format as defined by Unicode 2.1 and ISO/IEC 10646 standards.
14852aa9e136bb99c9c09d37179765344278251c618geekboy  ///
14952aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned short      CHAR16;
15052aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1518c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 2-byte signed value.
15252aa9e136bb99c9c09d37179765344278251c618geekboy  ///
15352aa9e136bb99c9c09d37179765344278251c618geekboy  typedef short               INT16;
15452aa9e136bb99c9c09d37179765344278251c618geekboy  ///
155f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  /// Logical Boolean.  1-byte value containing 0 for FALSE or a 1 for TRUE.  Other
156f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  /// values are undefined.
157f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
15852aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned char       BOOLEAN;
15952aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1608c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 1-byte unsigned value.
16152aa9e136bb99c9c09d37179765344278251c618geekboy  ///
16252aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned char       UINT8;
16352aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1648c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 1-byte Character.
16552aa9e136bb99c9c09d37179765344278251c618geekboy  ///
16652aa9e136bb99c9c09d37179765344278251c618geekboy  typedef char                CHAR8;
167f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1688c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 1-byte signed value.
169f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
170d22ebbe39fcf3a7462492667345dabc401765454lgao  typedef signed char         INT8;
17152aa9e136bb99c9c09d37179765344278251c618geekboy#else
172f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1738c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 8-byte unsigned value.
174f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
17552aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned long long  UINT64;
176f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1778c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 8-byte signed value.
178f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
17952aa9e136bb99c9c09d37179765344278251c618geekboy  typedef long long           INT64;
180f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1818c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 4-byte unsigned value.
182f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
18352aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned int        UINT32;
184f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1858c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 4-byte signed value.
186f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
18752aa9e136bb99c9c09d37179765344278251c618geekboy  typedef int                 INT32;
188f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1898c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 2-byte unsigned value.
190f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
19152aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned short      UINT16;
192f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
19352aa9e136bb99c9c09d37179765344278251c618geekboy  /// 2-byte Character.  Unless otherwise specified all strings are stored in the
19452aa9e136bb99c9c09d37179765344278251c618geekboy  /// UTF-16 encoding format as defined by Unicode 2.1 and ISO/IEC 10646 standards.
195f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
19652aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned short      CHAR16;
197f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1988c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 2-byte signed value.
19952aa9e136bb99c9c09d37179765344278251c618geekboy  ///
20052aa9e136bb99c9c09d37179765344278251c618geekboy  typedef short               INT16;
20152aa9e136bb99c9c09d37179765344278251c618geekboy  ///
20252aa9e136bb99c9c09d37179765344278251c618geekboy  /// Logical Boolean.  1-byte value containing 0 for FALSE or a 1 for TRUE.  Other
20352aa9e136bb99c9c09d37179765344278251c618geekboy  /// values are undefined.
204f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
20552aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned char       BOOLEAN;
20652aa9e136bb99c9c09d37179765344278251c618geekboy  ///
2078c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 1-byte unsigned value.
20852aa9e136bb99c9c09d37179765344278251c618geekboy  ///
20952aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned char       UINT8;
210f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
211f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  /// 1-byte Character
212f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
21352aa9e136bb99c9c09d37179765344278251c618geekboy  typedef char                CHAR8;
214f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
21552aa9e136bb99c9c09d37179765344278251c618geekboy  /// 1-byte signed value
216f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
217d22ebbe39fcf3a7462492667345dabc401765454lgao  typedef signed char         INT8;
218959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
219959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
220f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney///
2218c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// Unsigned value of native width.  (4 bytes on supported 32-bit processor instructions;
2228c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// 8 bytes on supported 64-bit processor instructions.)
223f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney///
224959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef UINT32  UINTN;
225f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney///
2268c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// Signed value of native width.  (4 bytes on supported 32-bit processor instructions;
2278c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// 8 bytes on supported 64-bit processor instructions.)
228f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney///
229959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef INT32   INTN;
230959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
231f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney//
232f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney// Processor specific defines
233f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney//
234959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
2353566565aa46899c26d5d8243966643f9a89a2133klu///
236f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney/// A value of native width with the highest bit set.
2373566565aa46899c26d5d8243966643f9a89a2133klu///
238959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MAX_BIT     0x80000000
239f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney///
240f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney/// A value of native width with the two highest bits set.
241f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney///
242959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MAX_2_BITS  0xC0000000
243959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
2443566565aa46899c26d5d8243966643f9a89a2133klu///
2458c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// Maximum legal IA-32 address.
2463566565aa46899c26d5d8243966643f9a89a2133klu///
247959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MAX_ADDRESS   0xFFFFFFFF
248959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
2493566565aa46899c26d5d8243966643f9a89a2133klu///
250068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao/// Maximum legal IA-32 INTN and UINTN values.
251068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao///
252068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao#define MAX_INTN   ((INTN)0x7FFFFFFF)
253068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao#define MAX_UINTN  ((UINTN)0xFFFFFFFF)
254068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao
255068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao///
2568c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// The stack alignment required for IA-32.
2573566565aa46899c26d5d8243966643f9a89a2133klu///
258959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define CPU_STACK_ALIGNMENT   sizeof(UINTN)
259959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
260959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
261959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Modifier to ensure that all protocol member functions and EFI intrinsics
262959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// use the correct C calling convention. All protocol member functions and
2633963c4bf44b14be594c4253d695652e077856773gikidy// EFI intrinsics are required to modify their member functions with EFIAPI.
264959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
2656149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten#ifdef EFIAPI
2666149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten  ///
2676149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten  /// If EFIAPI is already defined, then we use that definition.
2686149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten  ///
2696149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten#elif defined(_MSC_EXTENSIONS)
2703566565aa46899c26d5d8243966643f9a89a2133klu  ///
2718c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// Microsoft* compiler specific method for EFIAPI calling convention.
2723566565aa46899c26d5d8243966643f9a89a2133klu  ///
273959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  #define EFIAPI __cdecl
274a0e1b1273546ba882372f861abf514edfe2c3a6algao#elif defined(__GNUC__)
275a0e1b1273546ba882372f861abf514edfe2c3a6algao  ///
276a0e1b1273546ba882372f861abf514edfe2c3a6algao  /// GCC specific method for EFIAPI calling convention.
277a0e1b1273546ba882372f861abf514edfe2c3a6algao  ///
278a0e1b1273546ba882372f861abf514edfe2c3a6algao  #define EFIAPI __attribute__((cdecl))
27986b2b825c48d9524db4870b87c185f707a3b1dfaklu#else
280a0e1b1273546ba882372f861abf514edfe2c3a6algao  ///
281a0e1b1273546ba882372f861abf514edfe2c3a6algao  /// The default for a non Microsoft* or GCC compiler is to assume the EFI ABI
282a0e1b1273546ba882372f861abf514edfe2c3a6algao  /// is the standard.
283a0e1b1273546ba882372f861abf514edfe2c3a6algao  ///
284a0e1b1273546ba882372f861abf514edfe2c3a6algao  #define EFIAPI
285959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
286959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
2875cfbd055878dcca6f3e4081fc5c8805fd2ce7107klu#if defined(__GNUC__)
288d4cf6b6c976d07af769ad3bfeeccbcf833e72c32eric_tian  ///
28968167fed0e4ecb5393a3f036d14c438f65c85f80mdkinney  /// For GNU assembly code, .global or .globl can declare global symbols.
29068167fed0e4ecb5393a3f036d14c438f65c85f80mdkinney  /// Define this macro to unify the usage.
29168167fed0e4ecb5393a3f036d14c438f65c85f80mdkinney  ///
29268167fed0e4ecb5393a3f036d14c438f65c85f80mdkinney  #define ASM_GLOBAL .globl
29327af6b876a70c49928bdae7bedbb72cba9a18171jwang#endif
29427af6b876a70c49928bdae7bedbb72cba9a18171jwang
29514996c966991de1127fc2d6af8a08df47167b4ablgao/**
29614996c966991de1127fc2d6af8a08df47167b4ablgao  Return the pointer to the first instruction of a function given a function pointer.
2971a2f870c9babe077c2d3abea23b6e8e044778341pkandel  On IA-32 CPU architectures, these two pointer values are the same,
29814996c966991de1127fc2d6af8a08df47167b4ablgao  so the implementation of this macro is very simple.
29914996c966991de1127fc2d6af8a08df47167b4ablgao
3003963c4bf44b14be594c4253d695652e077856773gikidy  @param  FunctionPointer   A pointer to a function.
30114996c966991de1127fc2d6af8a08df47167b4ablgao
30214996c966991de1127fc2d6af8a08df47167b4ablgao  @return The pointer to the first instruction of a function given a function pointer.
3033963c4bf44b14be594c4253d695652e077856773gikidy
30414996c966991de1127fc2d6af8a08df47167b4ablgao**/
3059a1d00cbb571c019e98b28189f6619ff32e7bb49mdkinney#define FUNCTION_ENTRY_POINT(FunctionPointer) (VOID *)(UINTN)(FunctionPointer)
30624a7505cefd6dbb73bcdf2778f4e59095780aa50mdkinney
30702eef553114dea1e4d55071e91398a0625e4e18cJordan Justen#ifndef __USER_LABEL_PREFIX__
30802eef553114dea1e4d55071e91398a0625e4e18cJordan Justen#define __USER_LABEL_PREFIX__ _
30902eef553114dea1e4d55071e91398a0625e4e18cJordan Justen#endif
31002eef553114dea1e4d55071e91398a0625e4e18cJordan Justen
311959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
312959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
313