]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPkg/Include/AsmMacroIoLib.h
ArmPlatformPkg/ArmPlatformStackLib: Introduced helper library to initialize stacks
[mirror_edk2.git] / ArmPkg / Include / AsmMacroIoLib.h
index 0276275a41f09e8318c711d7fccd080333f2ab83..c8692fcfd71e7cd70f3677ea17fee105d32cc3f7 100644 (file)
@@ -144,6 +144,21 @@ _SetPrimaryStackInitGlobals:          ;             \
   b       _SetPrimaryStackInitGlobals ;             \\r
 _SetPrimaryStackEnd:\r
 \r
+// Initialize the Global Variable with '0'\r
+#define 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
+  mov     GlobalSize, #0x0            ;             \\r
+_InitializePrimaryStackLoop:          ;             \\r
+  cmp     Tmp1, sp                    ;             \\r
+  bls     _InitializePrimaryStackEnd  ;             \\r
+  str     GlobalSize, [Tmp1], #-4     ;             \\r
+  b       _InitializePrimaryStackLoop ;             \\r
+_InitializePrimaryStackEnd:\r
 \r
 #elif defined (__GNUC__)\r
 \r
@@ -213,6 +228,22 @@ _SetPrimaryStackInitGlobals:          ;             \
   b       _SetPrimaryStackInitGlobals ;             \\r
 _SetPrimaryStackEnd:\r
 \r
+// Initialize the Global Variable with '0'\r
+#define 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
+  mov     GlobalSize, #0x0            ;             \\r
+_InitializePrimaryStackLoop:          ;             \\r
+  cmp     Tmp1, sp                    ;             \\r
+  bls     _InitializePrimaryStackEnd  ;             \\r
+  str     GlobalSize, [Tmp1], #-4     ;             \\r
+  b       _InitializePrimaryStackLoop ;             \\r
+_InitializePrimaryStackEnd:\r
+\r
 #else\r
 \r
 //\r
@@ -278,6 +309,9 @@ _SetPrimaryStackEnd:
 \r
 #define SetPrimaryStack(StackTop,GlobalSize,Tmp) SetPrimaryStack StackTop, GlobalSize, Tmp\r
 \r
+// Initialize the Global Variable with '0'\r
+#define InitializePrimaryStack(GlobalSize, Tmp1) InitializePrimaryStack GlobalSize, Tmp1\r
+\r
 #endif\r
 \r
 #endif\r