Update to make end-of-line consistent for all source files in MdePkg. There are no...
[edk2.git] / MdePkg / Include / Arm / ProcessorBind.h
blob2f24f0da7005b9866831e76ed1a50d09240e7e8f
2 /** @file
3 Processor or Compiler specific defines and types for ARM.
5 Copyright (c) 2006 - 2009, Intel Corporation
6 Portions copyright (c) 2008-2009 Apple Inc. All rights reserved.
7 All rights reserved. This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 **/
17 #ifndef __PROCESSOR_BIND_H__
18 #define __PROCESSOR_BIND_H__
20 ///
21 /// Define the processor type so other code can make processor based choices
22 ///
23 #define MDE_CPU_ARM
26 // Make sure we are useing the correct packing rules per EFI specification
28 #ifndef __GNUC__
29 #pragma pack()
30 #endif
32 #if _MSC_EXTENSIONS
34 // use Microsoft* C complier dependent interger width types
36 typedef unsigned __int64 UINT64;
37 typedef __int64 INT64;
38 typedef unsigned __int32 UINT32;
39 typedef __int32 INT32;
40 typedef unsigned short UINT16;
41 typedef unsigned short CHAR16;
42 typedef short INT16;
43 typedef unsigned char BOOLEAN;
44 typedef unsigned char UINT8;
45 typedef char CHAR8;
46 typedef char INT8;
47 #else
49 // Assume standard ARM alignment.
50 // Need to check portability of long long
52 typedef unsigned long long UINT64;
53 typedef long long INT64;
54 typedef unsigned int UINT32;
55 typedef int INT32;
56 typedef unsigned short UINT16;
57 typedef unsigned short CHAR16;
58 typedef short INT16;
59 typedef unsigned char BOOLEAN;
60 typedef unsigned char UINT8;
61 typedef char CHAR8;
62 typedef char INT8;
63 #endif
65 ///
66 /// Unsigned value of native width. (4 bytes on supported 32-bit processor instructions,
67 /// 8 bytes on supported 64-bit processor instructions)
68 ///
69 typedef UINT32 UINTN;
71 ///
72 /// Signed value of native width. (4 bytes on supported 32-bit processor instructions,
73 /// 8 bytes on supported 64-bit processor instructions)
74 ///
75 typedef INT32 INTN;
78 // Processor specific defines
81 ///
82 /// A value of native width with the highest bit set.
83 ///
84 #define MAX_BIT 0x80000000
86 ///
87 /// A value of native width with the two highest bits set.
88 ///
89 #define MAX_2_BITS 0xC0000000
91 ///
92 /// Maximum legal ARM address
93 ///
94 #define MAX_ADDRESS 0xFFFFFFFF
96 ///
97 /// The stack alignment required for ARM
98 ///
99 #define CPU_STACK_ALIGNMENT sizeof(UINT64)
102 // Modifier to ensure that all protocol member functions and EFI intrinsics
103 // use the correct C calling convention. All protocol member functions and
104 // EFI intrinsics are required to modify thier member functions with EFIAPI.
106 #define EFIAPI
108 #if defined(__GNUC__)
110 /// For GNU assembly code, .global or .globl can declare global symbols.
111 /// Define this macro to unify the usage.
113 #define ASM_GLOBAL .globl
114 #endif
117 Return the pointer to the first instruction of a function given a function pointer.
118 On ARM CPU architectures, these two pointer values are the same,
119 so the implementation of this macro is very simple.
121 @param FunctionPointer A pointer to a function.
123 @return The pointer to the first instruction of a function given a function pointer.
126 #define FUNCTION_ENTRY_POINT(FunctionPointer) (FunctionPointer)
128 #endif