X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdePkg%2FLibrary%2FBaseLib%2FIpf%2FCpuFlushTlb.s;h=c50eeb89f3378c809f95cf76bab896ab4e979cc7;hb=64ad76699ce473e8847a8cc7b84815197d047b9a;hp=0afd87e88b2da928da44001d32318add24bf14b5;hpb=baa1b55e453bea50d930316fb52a1a92ad29187b;p=mirror_edk2.git diff --git a/MdePkg/Library/BaseLib/Ipf/CpuFlushTlb.s b/MdePkg/Library/BaseLib/Ipf/CpuFlushTlb.s index 0afd87e88b..c50eeb89f3 100644 --- a/MdePkg/Library/BaseLib/Ipf/CpuFlushTlb.s +++ b/MdePkg/Library/BaseLib/Ipf/CpuFlushTlb.s @@ -17,13 +17,42 @@ .auto .text +.global PalCallStatic +.type PalCallStatic, @function + .proc CpuFlushTlb .type CpuFlushTlb, @function CpuFlushTlb:: - mov r8 = ip - mov r9 = -1 - dep.z r10 = -1, 61, 3 - and r8 = r8, r10 - ptc.l r8, r9 + alloc loc0 = ar.pfs, 0, 3, 5, 0 + mov out0 = 0 + mov out1 = 6 + mov out2 = 0 + mov out3 = 0 + mov loc1 = b0 + mov out4 = 0 + brl.call.sptk b0 = PalCallStatic + mov loc2 = psr // save PSR + mov ar.pfs = loc0 + extr.u r14 = r10, 32, 32 // r14 <- count1 + rsm 1 << 14 // Disable interrupts + extr.u r15 = r11, 32, 32 // r15 <- stride1 + extr.u r10 = r10, 0, 32 // r10 <- count2 + add r10 = -1, r10 + extr.u r11 = r11, 0, 32 // r11 <- stride2 + br.cond.sptk LoopPredicate +LoopOuter: + mov ar.lc = r10 // LC <- count2 + mov ar.ec = r0 // EC <- 0 +Loop: + ptc.e r9 + add r9 = r11, r9 // r9 += stride2 + br.ctop.sptk Loop + add r9 = r15, r9 // r9 += stride1 +LoopPredicate: + cmp.ne p6 = r0, r14 // count1 == 0? + add r14 = -1, r14 +(p6) br.cond.sptk LoopOuter + mov psr.l = loc2 + mov b0 = loc1 br.ret.sptk.many b0 .endp