ProcessorBind.h revision 02eef553114dea1e4d55071e91398a0625e4e18c
1959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang/** @file
21a2f870c9babe077c2d3abea23b6e8e044778341pkandel  Processor or Compiler specific defines and types for IA-32 architecture.
3959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
4068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming GaoCopyright (c) 2006 - 2013, 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
96959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
97959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
98959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
9952aa9e136bb99c9c09d37179765344278251c618geekboy#if defined(_MSC_EXTENSIONS)
100f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney
101959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  //
10252aa9e136bb99c9c09d37179765344278251c618geekboy  // use Microsoft C complier dependent integer width types
103959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  //
104f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney
105f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1068c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 8-byte unsigned value.
10752aa9e136bb99c9c09d37179765344278251c618geekboy  ///
10852aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned __int64    UINT64;
10952aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1108c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 8-byte signed value.
11152aa9e136bb99c9c09d37179765344278251c618geekboy  ///
11252aa9e136bb99c9c09d37179765344278251c618geekboy  typedef __int64             INT64;
11352aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1148c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 4-byte unsigned value.
11552aa9e136bb99c9c09d37179765344278251c618geekboy  ///
11652aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned __int32    UINT32;
11752aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1188c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 4-byte signed value.
11952aa9e136bb99c9c09d37179765344278251c618geekboy  ///
12052aa9e136bb99c9c09d37179765344278251c618geekboy  typedef __int32             INT32;
12152aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1228c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 2-byte unsigned value.
12352aa9e136bb99c9c09d37179765344278251c618geekboy  ///
12452aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned short      UINT16;
12552aa9e136bb99c9c09d37179765344278251c618geekboy  ///
12652aa9e136bb99c9c09d37179765344278251c618geekboy  /// 2-byte Character.  Unless otherwise specified all strings are stored in the
12752aa9e136bb99c9c09d37179765344278251c618geekboy  /// UTF-16 encoding format as defined by Unicode 2.1 and ISO/IEC 10646 standards.
12852aa9e136bb99c9c09d37179765344278251c618geekboy  ///
12952aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned short      CHAR16;
13052aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1318c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 2-byte signed value.
13252aa9e136bb99c9c09d37179765344278251c618geekboy  ///
13352aa9e136bb99c9c09d37179765344278251c618geekboy  typedef short               INT16;
13452aa9e136bb99c9c09d37179765344278251c618geekboy  ///
135f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  /// Logical Boolean.  1-byte value containing 0 for FALSE or a 1 for TRUE.  Other
136f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  /// values are undefined.
137f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
13852aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned char       BOOLEAN;
13952aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1408c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 1-byte unsigned value.
14152aa9e136bb99c9c09d37179765344278251c618geekboy  ///
14252aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned char       UINT8;
14352aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1448c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 1-byte Character.
14552aa9e136bb99c9c09d37179765344278251c618geekboy  ///
14652aa9e136bb99c9c09d37179765344278251c618geekboy  typedef char                CHAR8;
147f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1488c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 1-byte signed value.
149f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
150d22ebbe39fcf3a7462492667345dabc401765454lgao  typedef signed char         INT8;
15152aa9e136bb99c9c09d37179765344278251c618geekboy#else
152f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1538c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 8-byte unsigned value.
154f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
15552aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned long long  UINT64;
156f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1578c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 8-byte signed value.
158f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
15952aa9e136bb99c9c09d37179765344278251c618geekboy  typedef long long           INT64;
160f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1618c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 4-byte unsigned value.
162f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
16352aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned int        UINT32;
164f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1658c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 4-byte signed value.
166f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
16752aa9e136bb99c9c09d37179765344278251c618geekboy  typedef int                 INT32;
168f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1698c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 2-byte unsigned value.
170f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
17152aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned short      UINT16;
172f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
17352aa9e136bb99c9c09d37179765344278251c618geekboy  /// 2-byte Character.  Unless otherwise specified all strings are stored in the
17452aa9e136bb99c9c09d37179765344278251c618geekboy  /// UTF-16 encoding format as defined by Unicode 2.1 and ISO/IEC 10646 standards.
175f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
17652aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned short      CHAR16;
177f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
1788c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 2-byte signed value.
17952aa9e136bb99c9c09d37179765344278251c618geekboy  ///
18052aa9e136bb99c9c09d37179765344278251c618geekboy  typedef short               INT16;
18152aa9e136bb99c9c09d37179765344278251c618geekboy  ///
18252aa9e136bb99c9c09d37179765344278251c618geekboy  /// Logical Boolean.  1-byte value containing 0 for FALSE or a 1 for TRUE.  Other
18352aa9e136bb99c9c09d37179765344278251c618geekboy  /// values are undefined.
184f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
18552aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned char       BOOLEAN;
18652aa9e136bb99c9c09d37179765344278251c618geekboy  ///
1878c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// 1-byte unsigned value.
18852aa9e136bb99c9c09d37179765344278251c618geekboy  ///
18952aa9e136bb99c9c09d37179765344278251c618geekboy  typedef unsigned char       UINT8;
190f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
191f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  /// 1-byte Character
192f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
19352aa9e136bb99c9c09d37179765344278251c618geekboy  typedef char                CHAR8;
194f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
19552aa9e136bb99c9c09d37179765344278251c618geekboy  /// 1-byte signed value
196f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney  ///
197d22ebbe39fcf3a7462492667345dabc401765454lgao  typedef signed char         INT8;
198959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
199959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
200f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney///
2018c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// Unsigned value of native width.  (4 bytes on supported 32-bit processor instructions;
2028c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// 8 bytes on supported 64-bit processor instructions.)
203f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney///
204959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef UINT32  UINTN;
205f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney///
2068c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// Signed value of native width.  (4 bytes on supported 32-bit processor instructions;
2078c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// 8 bytes on supported 64-bit processor instructions.)
208f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney///
209959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef INT32   INTN;
210959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
211f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney//
212f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney// Processor specific defines
213f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney//
214959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
2153566565aa46899c26d5d8243966643f9a89a2133klu///
216f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney/// A value of native width with the highest bit set.
2173566565aa46899c26d5d8243966643f9a89a2133klu///
218959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MAX_BIT     0x80000000
219f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney///
220f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney/// A value of native width with the two highest bits set.
221f4ec40abd6533850edb914de59b7ef5f1c1c1bb6mdkinney///
222959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MAX_2_BITS  0xC0000000
223959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
2243566565aa46899c26d5d8243966643f9a89a2133klu///
2258c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// Maximum legal IA-32 address.
2263566565aa46899c26d5d8243966643f9a89a2133klu///
227959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define MAX_ADDRESS   0xFFFFFFFF
228959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
2293566565aa46899c26d5d8243966643f9a89a2133klu///
230068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao/// Maximum legal IA-32 INTN and UINTN values.
231068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao///
232068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao#define MAX_INTN   ((INTN)0x7FFFFFFF)
233068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao#define MAX_UINTN  ((UINTN)0xFFFFFFFF)
234068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao
235068a82fc5ae8f4186da92db8ba2aa3dcd1ef2d14Liming Gao///
2368c18db2750c60488f3889a0b6db96f746a66ccf7myronporter/// The stack alignment required for IA-32.
2373566565aa46899c26d5d8243966643f9a89a2133klu///
238959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define CPU_STACK_ALIGNMENT   sizeof(UINTN)
239959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
240959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
241959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// Modifier to ensure that all protocol member functions and EFI intrinsics
242959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang// use the correct C calling convention. All protocol member functions and
2433963c4bf44b14be594c4253d695652e077856773gikidy// EFI intrinsics are required to modify their member functions with EFIAPI.
244959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang//
2456149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten#ifdef EFIAPI
2466149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten  ///
2476149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten  /// If EFIAPI is already defined, then we use that definition.
2486149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten  ///
2496149e6bb4f3b77f1f60379fb51b6bb414e9d9062jljusten#elif defined(_MSC_EXTENSIONS)
2503566565aa46899c26d5d8243966643f9a89a2133klu  ///
2518c18db2750c60488f3889a0b6db96f746a66ccf7myronporter  /// Microsoft* compiler specific method for EFIAPI calling convention.
2523566565aa46899c26d5d8243966643f9a89a2133klu  ///
253959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang  #define EFIAPI __cdecl
254a0e1b1273546ba882372f861abf514edfe2c3a6algao#elif defined(__GNUC__)
255a0e1b1273546ba882372f861abf514edfe2c3a6algao  ///
256a0e1b1273546ba882372f861abf514edfe2c3a6algao  /// GCC specific method for EFIAPI calling convention.
257a0e1b1273546ba882372f861abf514edfe2c3a6algao  ///
258a0e1b1273546ba882372f861abf514edfe2c3a6algao  #define EFIAPI __attribute__((cdecl))
25986b2b825c48d9524db4870b87c185f707a3b1dfaklu#else
260a0e1b1273546ba882372f861abf514edfe2c3a6algao  ///
261a0e1b1273546ba882372f861abf514edfe2c3a6algao  /// The default for a non Microsoft* or GCC compiler is to assume the EFI ABI
262a0e1b1273546ba882372f861abf514edfe2c3a6algao  /// is the standard.
263a0e1b1273546ba882372f861abf514edfe2c3a6algao  ///
264a0e1b1273546ba882372f861abf514edfe2c3a6algao  #define EFIAPI
265959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
266959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
2675cfbd055878dcca6f3e4081fc5c8805fd2ce7107klu#if defined(__GNUC__)
268d4cf6b6c976d07af769ad3bfeeccbcf833e72c32eric_tian  ///
26968167fed0e4ecb5393a3f036d14c438f65c85f80mdkinney  /// For GNU assembly code, .global or .globl can declare global symbols.
27068167fed0e4ecb5393a3f036d14c438f65c85f80mdkinney  /// Define this macro to unify the usage.
27168167fed0e4ecb5393a3f036d14c438f65c85f80mdkinney  ///
27268167fed0e4ecb5393a3f036d14c438f65c85f80mdkinney  #define ASM_GLOBAL .globl
27327af6b876a70c49928bdae7bedbb72cba9a18171jwang#endif
27427af6b876a70c49928bdae7bedbb72cba9a18171jwang
27514996c966991de1127fc2d6af8a08df47167b4ablgao/**
27614996c966991de1127fc2d6af8a08df47167b4ablgao  Return the pointer to the first instruction of a function given a function pointer.
2771a2f870c9babe077c2d3abea23b6e8e044778341pkandel  On IA-32 CPU architectures, these two pointer values are the same,
27814996c966991de1127fc2d6af8a08df47167b4ablgao  so the implementation of this macro is very simple.
27914996c966991de1127fc2d6af8a08df47167b4ablgao
2803963c4bf44b14be594c4253d695652e077856773gikidy  @param  FunctionPointer   A pointer to a function.
28114996c966991de1127fc2d6af8a08df47167b4ablgao
28214996c966991de1127fc2d6af8a08df47167b4ablgao  @return The pointer to the first instruction of a function given a function pointer.
2833963c4bf44b14be594c4253d695652e077856773gikidy
28414996c966991de1127fc2d6af8a08df47167b4ablgao**/
2859a1d00cbb571c019e98b28189f6619ff32e7bb49mdkinney#define FUNCTION_ENTRY_POINT(FunctionPointer) (VOID *)(UINTN)(FunctionPointer)
28624a7505cefd6dbb73bcdf2778f4e59095780aa50mdkinney
28702eef553114dea1e4d55071e91398a0625e4e18cJordan Justen#ifndef __USER_LABEL_PREFIX__
28802eef553114dea1e4d55071e91398a0625e4e18cJordan Justen#define __USER_LABEL_PREFIX__ _
28902eef553114dea1e4d55071e91398a0625e4e18cJordan Justen#endif
29002eef553114dea1e4d55071e91398a0625e4e18cJordan Justen
291959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif
292959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang
293