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