MEND \r
\r
MACRO\r
- GetCorePositionInStack $Pos, $MpId, $Tmp\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
beq _SetPrimaryStackEnd\r
str $GlobalSize, [$Tmp], #4\r
b _SetPrimaryStackInitGlobals\r
-\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