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