;/** @file\r
; Macros to work around lack of Apple support for LDR register, =expr\r
;\r
-; Copyright (c) 2009, Apple, Inc. All rights reserved.\r
+; Copyright (c) 2009, Apple Inc. All rights reserved.<BR>\r
+; Copyright (c) 2011-2012, ARM Ltd. All rights reserved.<BR>\r
+;\r
+; This program and the accompanying materials \r
+; are licensed and made available under the terms and conditions of the BSD License \r
+; which accompanies this distribution. The full text of the license may be found at \r
+; http://opensource.org/licenses/bsd-license.php \r
+; \r
+; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
;\r
;**/\r
\r
LoadConstantToRegMacro $Data, $Reg \r
ldr $Reg, =($Data) \r
MEND \r
+ \r
+ MACRO\r
+ GetCorePositionFromMpId $Pos, $MpId, $Tmp\r
+ ;Note: The ARM macro does not support the pre-processing. 0xFF and (0xFF << 8) are the values of\r
+ ; ARM_CORE_MASK and ARM_CLUSTER_MASK \r
+ mov $Tmp, #(0xFF :OR: (0xFF << 8))\r
+ and $MpId, $Tmp\r
+ lsr $Pos, $MpId, #6\r
+ and $Tmp, $MpId, #3\r
+ add $Pos, $Pos, $Tmp\r
+ MEND\r
+ \r
+ ; The reserved place must be 8-bytes aligned for pushing 64-bit variable on the stack\r
+ ; Note: Global Size will be modified\r
+ MACRO\r
+ SetPrimaryStack $StackTop, $GlobalSize, $Tmp\r
+ and $Tmp, $GlobalSize, #7\r
+ rsbne $Tmp, $Tmp, #8\r
+ add $GlobalSize, $GlobalSize, $Tmp\r
+ sub sp, $StackTop, $GlobalSize\r
+\r
+ ; Set all the global variables to 0\r
+ mov $Tmp, sp\r
+ mov $GlobalSize, #0x0\r
+_SetPrimaryStackInitGlobals\r
+ cmp $Tmp, $StackTop\r
+ beq _SetPrimaryStackEnd\r
+ str $GlobalSize, [$Tmp], #4\r
+ b _SetPrimaryStackInitGlobals\r
+_SetPrimaryStackEnd\r
+ MEND\r
+\r
+ MACRO\r
+ InitializePrimaryStack $GlobalSize, $Tmp1\r
+ and $Tmp1, $GlobalSize, #7\r
+ rsbne $Tmp1, $Tmp1, #8\r
+ add $GlobalSize, $GlobalSize, $Tmp1\r
+\r
+ mov $Tmp1, sp\r
+ sub sp, $GlobalSize\r
+ ; Set all the global variables to 0\r
+ mov $GlobalSize, #0x0\r
+_InitializePrimaryStackLoop\r
+ cmp $Tmp1, sp\r
+ bls _InitializePrimaryStackEnd\r
+ str $GlobalSize, [$Tmp1], #-4\r
+ b _InitializePrimaryStackLoop\r
+_InitializePrimaryStackEnd\r
+ MEND\r
\r
END\r