]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseLib/Ipf/CpuFlushTlb.s
Changed SwitchStack() to _SwitchStack()
[mirror_edk2.git] / MdePkg / Library / BaseLib / Ipf / CpuFlushTlb.s
index 0afd87e88b2da928da44001d32318add24bf14b5..608830496c99674aa801f4735eddb91327e52066 100644 (file)
 .auto\r
 .text\r
 \r
+.global PalCallStatic\r
+.type   PalCallStatic, @function\r
+\r
 .proc   CpuFlushTlb\r
 .type   CpuFlushTlb, @function\r
 CpuFlushTlb::\r
-        mov                 r8  = ip\r
-        mov                 r9  = -1\r
-        dep.z               r10 = -1, 61, 3\r
-        and                 r8  = r8, r10\r
-        ptc.l               r8, r9\r
+        alloc               loc0 = ar.pfs, 0, 2, 5, 0\r
+        mov                 out0 = 0\r
+        mov                 out1 = 6\r
+        mov                 out2 = 0\r
+        mov                 out3 = 0\r
+        mov                 out4 = 0\r
+        mov                 loc1 = b0\r
+        br.call.sptk        b0  = PalCallStatic\r
+        rsm                 1 << 14                 // Disable interrupts\r
+        mov                 ar.pfs = loc0\r
+        extr.u              r14 = r10, 32, 32       // r14 <- count1\r
+        extr.u              r15 = r11, 32, 32       // r15 <- stride1\r
+        extr.u              r10 = r10, 0, 32        // r10 <- count2\r
+        mov                 loc0 = psr\r
+        extr.u              r11 = r11, 0, 32        // r11 <- stride2\r
+        br.cond.sptk        LoopPredicate\r
+LoopOuter:\r
+        mov                 ar.lc = r10             // LC <- count2\r
+        mov                 ar.ec = r0              // EC <- 0\r
+Loop:\r
+        ptc.e               r9\r
+        add                 r9 = r11, r9            // r9 += stride2\r
+        br.ctop.sptk        Loop\r
+        add                 r9 = r15, r9            // r9 += stride1\r
+LoopPredicate:\r
+        cmp.ne              p6, p7 = r0, r14        // count1 == 0?\r
+        add                 r14 = -1, r14\r
+(p6)    br.cond.sptk        LoopOuter\r
+        mov                 psr.l = loc0\r
+        mov                 b0  = loc1\r
         br.ret.sptk.many    b0\r
 .endp\r