ProcessorBind.h revision d1057d4ec5d3a48c800d041c44ed07a2dbe9d936
1/** @file 2 Processor or Compiler specific defines and types for Ia32 architecture. 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**/ 14 15#ifndef __PROCESSOR_BIND_H__ 16#define __PROCESSOR_BIND_H__ 17 18// 19// Define the processor type so other code can make processor based choices 20// 21#define MDE_CPU_IA32 22 23// 24// Make sure we are useing the correct packing rules per EFI specification 25// 26#ifndef __GNUC__ 27#pragma pack() 28#endif 29 30#if __INTEL_COMPILER 31// 32// Disable ICC's remark #1418: external function definition with no prior declaration. 33// This is legal ANSI C code so we disable the remark that is turned on with /W4 34// 35#pragma warning ( disable : 1418 ) 36 37 38// 39// Disable ICC's remark #1419: external declaration in primary source file 40// This is legal ANSI C code so we disable the remark that is turned on with /W4 41// 42#pragma warning ( disable : 1419 ) 43 44#endif 45 46 47#if _MSC_EXTENSIONS 48 49// 50// Disable warning that make it impossible to compile at /W4 51// This only works for Microsoft* tools 52// 53 54// 55// Disabling bitfield type checking warnings. 56// 57#pragma warning ( disable : 4214 ) 58 59// 60// Disabling the unreferenced formal parameter warnings. 61// 62#pragma warning ( disable : 4100 ) 63 64// 65// Disable slightly different base types warning as CHAR8 * can not be set 66// to a constant string. 67// 68#pragma warning ( disable : 4057 ) 69 70// 71// ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning 72// 73#pragma warning ( disable : 4127 ) 74 75// 76// This warning is caused by functions defined but not used. For precompiled header only. 77// 78#pragma warning ( disable : 4505 ) 79 80// 81// This warning is caused by empty (after preprocessing) souce file. For precompiled header only. 82// 83#pragma warning ( disable : 4206 ) 84 85#endif 86 87 88#if !defined(__GNUC__) && (__STDC_VERSION__ < 199901L) 89 // 90 // No ANSI C 2000 stdint.h integer width declarations, so define equivalents 91 // 92 93 #if _MSC_EXTENSIONS 94 95 // 96 // use Microsoft* C complier dependent interger width types 97 // 98 typedef unsigned __int64 UINT64; 99 typedef __int64 INT64; 100 typedef unsigned __int32 UINT32; 101 typedef __int32 INT32; 102 typedef unsigned short UINT16; 103 typedef unsigned short CHAR16; 104 typedef short INT16; 105 typedef unsigned char BOOLEAN; 106 typedef unsigned char UINT8; 107 typedef char CHAR8; 108 typedef char INT8; 109 #else 110 111 // 112 // Assume standard IA-32 alignment. 113 // Need to check portability of long long 114 // 115 typedef unsigned long long UINT64; 116 typedef long long INT64; 117 typedef unsigned int UINT32; 118 typedef int INT32; 119 typedef unsigned short UINT16; 120 typedef unsigned short CHAR16; 121 typedef short INT16; 122 typedef unsigned char BOOLEAN; 123 typedef unsigned char UINT8; 124 typedef char CHAR8; 125 typedef char INT8; 126 #endif 127 128 #define UINT8_MAX 0xff 129 130#else 131 // 132 // Use ANSI C 2000 stdint.h integer width declarations 133 // 134 #include "stdint.h" 135 typedef uint8_t BOOLEAN; 136 typedef int8_t INT8; 137 typedef uint8_t UINT8; 138 typedef int16_t INT16; 139 typedef uint16_t UINT16; 140 typedef int32_t INT32; 141 typedef uint32_t UINT32; 142 typedef int64_t INT64; 143 typedef uint64_t UINT64; 144 typedef char CHAR8; 145 typedef uint16_t CHAR16; 146 147#endif 148 149typedef UINT32 UINTN; 150typedef INT32 INTN; 151 152 153// 154// Processor specific defines 155// 156#define MAX_BIT 0x80000000 157#define MAX_2_BITS 0xC0000000 158 159// 160// Maximum legal IA-32 address 161// 162#define MAX_ADDRESS 0xFFFFFFFF 163 164// 165// The stack alignment required for IA-32 166// 167#define CPU_STACK_ALIGNMENT sizeof(UINTN) 168 169// 170// Modifier to ensure that all protocol member functions and EFI intrinsics 171// use the correct C calling convention. All protocol member functions and 172// EFI intrinsics are required to modify thier member functions with EFIAPI. 173// 174#if _MSC_EXTENSIONS 175 // 176 // Microsoft* compiler requires _EFIAPI useage, __cdecl is Microsoft* specific C. 177 // 178 #define EFIAPI __cdecl 179#endif 180 181#if __GNUC__ 182 #define EFIAPI __attribute__((cdecl)) 183#endif 184 185// 186// The Microsoft* C compiler can removed references to unreferenced data items 187// if the /OPT:REF linker option is used. We defined a macro as this is a 188// a non standard extension 189// 190#if _MSC_EXTENSIONS 191 #define GLOBAL_REMOVE_IF_UNREFERENCED __declspec(selectany) 192#else 193 #define GLOBAL_REMOVE_IF_UNREFERENCED 194#endif 195 196// 197// For symbol name in GNU assembly code, an extra "_" is necessary 198// 199#if __GNUC__ 200 #define ASM_PFX(name) _##name 201#endif 202 203#define FUNCTION_ENTRY_POINT(p) (p) 204 205#endif 206 207