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.
17 #ifndef __PROCESSOR_BIND_H__
18 #define __PROCESSOR_BIND_H__
21 /// Define the processor type so other code can make processor based choices
26 // Make sure we are useing the correct packing rules per EFI specification
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
;
43 typedef unsigned char BOOLEAN
;
44 typedef unsigned char UINT8
;
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
;
56 typedef unsigned short UINT16
;
57 typedef unsigned short CHAR16
;
59 typedef unsigned char BOOLEAN
;
60 typedef unsigned char UINT8
;
66 /// Unsigned value of native width. (4 bytes on supported 32-bit processor instructions,
67 /// 8 bytes on supported 64-bit processor instructions)
72 /// Signed value of native width. (4 bytes on supported 32-bit processor instructions,
73 /// 8 bytes on supported 64-bit processor instructions)
78 // Processor specific defines
82 /// A value of native width with the highest bit set.
84 #define MAX_BIT 0x80000000
87 /// A value of native width with the two highest bits set.
89 #define MAX_2_BITS 0xC0000000
92 /// Maximum legal ARM address
94 #define MAX_ADDRESS 0xFFFFFFFF
97 /// The stack alignment required for ARM
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.
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
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)