From: bxing Date: Thu, 6 Jul 2006 07:46:22 +0000 (+0000) Subject: 1. Simplified PalCallStatic.s's by removing unnecessary condition testings. X-Git-Tag: edk2-stable201903~25050 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=a69c49fc119ae22e62acd00da011fb9e2bfa433f 1. Simplified PalCallStatic.s's by removing unnecessary condition testings. 2. Fixed a logical error in Synchronization.c which caused InterlockedIncrement() and InterlockedDecrement() to hang. 3. Replaced the pseudo-implementation of GetInterruptState() with a real version. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@793 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/MdePkg/Library/BaseCacheMaintenanceLib/Ipf/PalCallStatic.s b/MdePkg/Library/BaseCacheMaintenanceLib/Ipf/PalCallStatic.s index 686383793d..c21d7427f9 100644 --- a/MdePkg/Library/BaseCacheMaintenanceLib/Ipf/PalCallStatic.s +++ b/MdePkg/Library/BaseCacheMaintenanceLib/Ipf/PalCallStatic.s @@ -22,27 +22,27 @@ .type PalCallStatic, @function .regstk 5, 0, 0, 0 PalCallStatic:: - cmp.eq p6 = r0, in0 + cmp.eq p15 = in0, r0 mov r31 = in4 mov r8 = ip -(p6) mov in0 = ar.k5 - add r8 = (PalProcReturn - PalCallStatic), r8 - mov in4 = b0 + +(p15) mov in0 = ar.k5 + add r8 = (_PalProcReturn - PalCallStatic), r8 mov r30 = in3 - mov r29 = in2 + + mov in4 = psr + mov in3 = b0 mov b7 = in0 - mov in3 = psr + rsm 1 << 14 // Disable interrupts + mov r29 = in2 mov r28 = in1 - mov in0 = 256 + mov b0 = r8 - br.cond.sptk b7 -PalProcReturn: - mov psr.l = in3 - cmp.eq p6 = in0, in1 // in1 == PAL_COPY_PAL? -(p6) cmp.eq p6 = r0, r8 // Status == Success? -(p6) add in2 = r9, in2 -(p6) mov ar.k5 = in2 - mov b0 = in4 + br.cond.sptk.many b7 + +_PalProcReturn: + mov psr.l = in4 + mov b0 = in3 br.ret.sptk.many b0 .endp PalCallStatic diff --git a/MdePkg/Library/BaseLib/BaseLib.msa b/MdePkg/Library/BaseLib/BaseLib.msa index 5e677704a8..8d7af00fec 100644 --- a/MdePkg/Library/BaseLib/BaseLib.msa +++ b/MdePkg/Library/BaseLib/BaseLib.msa @@ -1,4 +1,4 @@ - + BaseLib @@ -277,6 +277,7 @@ Ipf/Synchronization.c Ipf/CpuPause.s Ipf/CpuFlushTlb.s + Ipf/GetInterruptState.s Math64.c Unaligned.c Ebc/SwitchStack.c diff --git a/MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c b/MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c index 478cac8c91..0097d991eb 100644 --- a/MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c +++ b/MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c @@ -97,25 +97,6 @@ EnableInterrupts ( _enable (); } -/** - Retrieves the current CPU interrupt state. - - Retrieves the current CPU interrupt state. Returns TRUE is interrupts are - currently enabled. Otherwise returns FALSE. - - @retval TRUE CPU interrupts are enabled. - @retval FALSE CPU interrupts are disabled. - -**/ -BOOLEAN -EFIAPI -GetInterruptState ( - VOID - ) -{ - return FALSE; -} - /** Enables CPU interrupts for the smallest window required to capture any pending interrupts. diff --git a/MdePkg/Library/BaseLib/Ipf/GetInterruptState.s b/MdePkg/Library/BaseLib/Ipf/GetInterruptState.s new file mode 100644 index 0000000000..66eb17f3df --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/GetInterruptState.s @@ -0,0 +1,27 @@ +/// @file +/// Retrieve of the interrupt state of the running processor for the Itanium +/// architecture. +/// +/// Copyright (c) 2006, Intel Corporation +/// All rights reserved. This program and the accompanying materials +/// are licensed and made available under the terms and conditions of the BSD License +/// which accompanies this distribution. The full text of the license may be found at +/// http://opensource.org/licenses/bsd-license.php +/// +/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +/// +/// Module Name: GetInterruptState.s +/// +/// + +.auto +.text + +.proc GetInterruptState +.type GetInterruptState, @function +GetInterruptState:: + mov r8 = psr + dep.z r8 = r8, 14, 1 + br.ret.sptk.many b0 +.endp GetInterruptState diff --git a/MdePkg/Library/BaseLib/Ipf/PalCallStatic.s b/MdePkg/Library/BaseLib/Ipf/PalCallStatic.s index 686383793d..c21d7427f9 100644 --- a/MdePkg/Library/BaseLib/Ipf/PalCallStatic.s +++ b/MdePkg/Library/BaseLib/Ipf/PalCallStatic.s @@ -22,27 +22,27 @@ .type PalCallStatic, @function .regstk 5, 0, 0, 0 PalCallStatic:: - cmp.eq p6 = r0, in0 + cmp.eq p15 = in0, r0 mov r31 = in4 mov r8 = ip -(p6) mov in0 = ar.k5 - add r8 = (PalProcReturn - PalCallStatic), r8 - mov in4 = b0 + +(p15) mov in0 = ar.k5 + add r8 = (_PalProcReturn - PalCallStatic), r8 mov r30 = in3 - mov r29 = in2 + + mov in4 = psr + mov in3 = b0 mov b7 = in0 - mov in3 = psr + rsm 1 << 14 // Disable interrupts + mov r29 = in2 mov r28 = in1 - mov in0 = 256 + mov b0 = r8 - br.cond.sptk b7 -PalProcReturn: - mov psr.l = in3 - cmp.eq p6 = in0, in1 // in1 == PAL_COPY_PAL? -(p6) cmp.eq p6 = r0, r8 // Status == Success? -(p6) add in2 = r9, in2 -(p6) mov ar.k5 = in2 - mov b0 = in4 + br.cond.sptk.many b7 + +_PalProcReturn: + mov psr.l = in4 + mov b0 = in3 br.ret.sptk.many b0 .endp PalCallStatic diff --git a/MdePkg/Library/BaseLib/Ipf/Synchronization.c b/MdePkg/Library/BaseLib/Ipf/Synchronization.c index 9eb8799e30..f09dbd5c00 100644 --- a/MdePkg/Library/BaseLib/Ipf/Synchronization.c +++ b/MdePkg/Library/BaseLib/Ipf/Synchronization.c @@ -32,7 +32,7 @@ InternalSyncIncrement ( do { OriginalValue = *Value; - } while (OriginalValue == InternalSyncCompareExchange32 ( + } while (OriginalValue != InternalSyncCompareExchange32 ( Value, OriginalValue, OriginalValue + 1 @@ -50,7 +50,7 @@ InternalSyncDecrement ( do { OriginalValue = *Value; - } while (OriginalValue == InternalSyncCompareExchange32 ( + } while (OriginalValue != InternalSyncCompareExchange32 ( Value, OriginalValue, OriginalValue - 1 diff --git a/MdePkg/Library/BaseTimerLibLocalApic/Ipf/PalCallStatic.s b/MdePkg/Library/BaseTimerLibLocalApic/Ipf/PalCallStatic.s index 686383793d..c21d7427f9 100644 --- a/MdePkg/Library/BaseTimerLibLocalApic/Ipf/PalCallStatic.s +++ b/MdePkg/Library/BaseTimerLibLocalApic/Ipf/PalCallStatic.s @@ -22,27 +22,27 @@ .type PalCallStatic, @function .regstk 5, 0, 0, 0 PalCallStatic:: - cmp.eq p6 = r0, in0 + cmp.eq p15 = in0, r0 mov r31 = in4 mov r8 = ip -(p6) mov in0 = ar.k5 - add r8 = (PalProcReturn - PalCallStatic), r8 - mov in4 = b0 + +(p15) mov in0 = ar.k5 + add r8 = (_PalProcReturn - PalCallStatic), r8 mov r30 = in3 - mov r29 = in2 + + mov in4 = psr + mov in3 = b0 mov b7 = in0 - mov in3 = psr + rsm 1 << 14 // Disable interrupts + mov r29 = in2 mov r28 = in1 - mov in0 = 256 + mov b0 = r8 - br.cond.sptk b7 -PalProcReturn: - mov psr.l = in3 - cmp.eq p6 = in0, in1 // in1 == PAL_COPY_PAL? -(p6) cmp.eq p6 = r0, r8 // Status == Success? -(p6) add in2 = r9, in2 -(p6) mov ar.k5 = in2 - mov b0 = in4 + br.cond.sptk.many b7 + +_PalProcReturn: + mov psr.l = in4 + mov b0 = in3 br.ret.sptk.many b0 .endp PalCallStatic