ProcessorBind.h revision 959ccb23c6a14797ecaf5990bd5906b4b05a9b75
1/** @file 2 Processor or Compiler specific defines and types for x64. 3 4 Copyright (c) 2006, Intel Corporation 5 All rights reserved. This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 Module Name: ProcessorBind.h 14 15**/ 16 17#ifndef __PROCESSOR_BIND_H__ 18#define __PROCESSOR_BIND_H__ 19 20// 21// Define the processor type so other code can make processor based choices 22// 23#define MDE_CPU_IA32 24 25// 26// Make sure we are useing the correct packing rules per EFI specification 27// 28#ifndef __GNUC__ 29#pragma pack() 30#endif 31 32#if _MSC_EXTENSIONS 33 34// 35// Disable warning that make it impossible to compile at /W4 36// This only works for Microsoft* tools 37// 38 39// 40// Disabling bitfield type checking warnings. 41// 42#pragma warning ( disable : 4214 ) 43 44// 45// Disabling the unreferenced formal parameter warnings. 46// 47#pragma warning ( disable : 4100 ) 48 49// 50// Disable slightly different base types warning as CHAR8 * can not be set 51// to a constant string. 52// 53#pragma warning ( disable : 4057 ) 54 55// 56// ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning 57// 58#pragma warning ( disable : 4127 ) 59 60// 61// This warning is caused by functions defined but not used. For precompiled header only. 62// 63#pragma warning ( disable : 4505 ) 64 65// 66// This warning is caused by empty (after preprocessing) souce file. For precompiled header only. 67// 68#pragma warning ( disable : 4206 ) 69 70#endif 71 72 73#if !defined(__GNUC__) && (__STDC_VERSION__ < 199901L) 74 // 75 // No ANSI C 2000 stdint.h integer width declarations, so define equivalents 76 // 77 78 #if _MSC_EXTENSIONS 79 80 // 81 // use Microsoft* C complier dependent interger width types 82 // 83 typedef unsigned __int64 UINT64; 84 typedef __int64 INT64; 85 typedef unsigned __int32 UINT32; 86 typedef __int32 INT32; 87 typedef unsigned short UINT16; 88 typedef unsigned short CHAR16; 89 typedef short INT16; 90 typedef unsigned char BOOLEAN; 91 typedef unsigned char UINT8; 92 typedef char CHAR8; 93 typedef char INT8; 94 #else 95 96 // 97 // Assume standard IA-32 alignment. 98 // Need to check portability of long long 99 // 100 typedef unsigned long long UINT64; 101 typedef long long INT64; 102 typedef unsigned int UINT32; 103 typedef int INT32; 104 typedef unsigned short UINT16; 105 typedef unsigned short CHAR16; 106 typedef short INT16; 107 typedef unsigned char BOOLEAN; 108 typedef unsigned char UINT8; 109 typedef char CHAR8; 110 typedef char INT8; 111 #endif 112 113 #define UINT8_MAX 0xff 114 115#else 116 // 117 // Use ANSI C 2000 stdint.h integer width declarations 118 // 119 #include "stdint.h" 120 typedef uint8_t BOOLEAN; 121 typedef int8_t INT8; 122 typedef uint8_t UINT8; 123 typedef int16_t INT16; 124 typedef uint16_t UINT16; 125 typedef int32_t INT32; 126 typedef uint32_t UINT32; 127 typedef int64_t INT64; 128 typedef uint64_t UINT64; 129 typedef char CHAR8; 130 typedef uint16_t CHAR16; 131 132#endif 133 134typedef UINT32 UINTN; 135typedef INT32 INTN; 136 137 138// 139// Processor specific defines 140// 141#define MAX_BIT 0x80000000 142#define MAX_2_BITS 0xC0000000 143 144// 145// Maximum legal IA-32 address 146// 147#define MAX_ADDRESS 0xFFFFFFFF 148 149// 150// The stack alignment required for IA-32 151// 152#define CPU_STACK_ALIGNMENT sizeof(UINTN) 153 154// 155// Modifier to ensure that all protocol member functions and EFI intrinsics 156// use the correct C calling convention. All protocol member functions and 157// EFI intrinsics are required to modify thier member functions with EFIAPI. 158// 159#if _MSC_EXTENSIONS 160 // 161 // Microsoft* compiler requires _EFIAPI useage, __cdecl is Microsoft* specific C. 162 // 163 #define EFIAPI __cdecl 164#endif 165 166#if __GNUC__ 167 #define EFIAPI __attribute__((cdecl)) 168#endif 169 170// 171// The Microsoft* C compiler can removed references to unreferenced data items 172// if the /OPT:REF linker option is used. We defined a macro as this is a 173// a non standard extension 174// 175#if _MSC_EXTENSIONS 176 #define GLOBAL_REMOVE_IF_UNREFERENCED __declspec(selectany) 177#else 178 #define GLOBAL_REMOVE_IF_UNREFERENCED 179#endif 180 181#endif 182 183