1. Simplified PalCallStatic.s's by removing unnecessary condition testings.
authorbxing <bxing@de2fecce-e211-0410-80a6-f3fac2684e05>
Thu, 6 Jul 2006 07:46:22 +0000 (07:46 +0000)
committerbxing <bxing@de2fecce-e211-0410-80a6-f3fac2684e05>
Thu, 6 Jul 2006 07:46:22 +0000 (07:46 +0000)
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.tianocore.org/svn/edk2/trunk@793 de2fecce-e211-0410-80a6-f3fac2684e05

edk2/MdePkg/Library/BaseCacheMaintenanceLib/Ipf/PalCallStatic.s
edk2/MdePkg/Library/BaseLib/BaseLib.msa
edk2/MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c
edk2/MdePkg/Library/BaseLib/Ipf/GetInterruptState.s [new file with mode: 0644]
edk2/MdePkg/Library/BaseLib/Ipf/PalCallStatic.s
edk2/MdePkg/Library/BaseLib/Ipf/Synchronization.c
edk2/MdePkg/Library/BaseTimerLibLocalApic/Ipf/PalCallStatic.s

index 6863837..c21d742 100644 (file)
 .type   PalCallStatic, @function\r
 .regstk 5, 0, 0, 0\r
 PalCallStatic::\r
-        cmp.eq              p6 = r0, in0\r
+        cmp.eq              p15 = in0, r0\r
         mov                 r31 = in4\r
         mov                 r8  = ip\r
-(p6)    mov                 in0 = ar.k5\r
-        add                 r8  = (PalProcReturn - PalCallStatic), r8\r
-        mov                 in4 = b0\r
+\r
+(p15)   mov                 in0 = ar.k5\r
+        add                 r8  = (_PalProcReturn - PalCallStatic), r8\r
         mov                 r30 = in3\r
-        mov                 r29 = in2\r
+\r
+        mov                 in4 = psr\r
+        mov                 in3 = b0\r
         mov                 b7  = in0\r
-        mov                 in3 = psr\r
+\r
         rsm                 1 << 14                 // Disable interrupts\r
+        mov                 r29 = in2\r
         mov                 r28 = in1\r
-        mov                 in0 = 256\r
+\r
         mov                 b0  = r8\r
-        br.cond.sptk        b7\r
-PalProcReturn:\r
-        mov                 psr.l = in3\r
-        cmp.eq              p6 = in0, in1           // in1 == PAL_COPY_PAL?\r
-(p6)    cmp.eq              p6 = r0, r8             // Status == Success?\r
-(p6)    add                 in2 = r9, in2\r
-(p6)    mov                 ar.k5 = in2\r
-        mov                 b0  = in4\r
+        br.cond.sptk.many   b7\r
+\r
+_PalProcReturn:\r
+        mov                 psr.l = in4\r
+        mov                 b0  = in3\r
         br.ret.sptk.many    b0\r
 .endp   PalCallStatic\r
index 5e67770..8d7af00 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
+<?xml version="1.0" encoding="UTF-8"?>\r
 <ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0">\r
   <MsaHeader>\r
     <ModuleName>BaseLib</ModuleName>\r
     <Filename SupArchList="IPF">Ipf/Synchronization.c</Filename>\r
     <Filename SupArchList="IPF">Ipf/CpuPause.s</Filename>\r
     <Filename SupArchList="IPF">Ipf/CpuFlushTlb.s</Filename>\r
+    <Filename SupArchList="IPF">Ipf/GetInterruptState.s</Filename>\r
     <Filename SupArchList="EBC">Math64.c</Filename>\r
     <Filename SupArchList="EBC">Unaligned.c</Filename>\r
     <Filename SupArchList="EBC">Ebc/SwitchStack.c</Filename>\r
index 478cac8..0097d99 100644 (file)
@@ -97,25 +97,6 @@ EnableInterrupts (
   _enable ();\r
 }\r
 \r
-/**\r
-  Retrieves the current CPU interrupt state.\r
-\r
-  Retrieves the current CPU interrupt state. Returns TRUE is interrupts are\r
-  currently enabled. Otherwise returns FALSE.\r
-\r
-  @retval TRUE  CPU interrupts are enabled.\r
-  @retval FALSE CPU interrupts are disabled.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-GetInterruptState (\r
-  VOID\r
-  )\r
-{\r
-  return FALSE;\r
-}\r
-\r
 /**\r
   Enables CPU interrupts for the smallest window required to capture any\r
   pending interrupts.\r
diff --git a/edk2/MdePkg/Library/BaseLib/Ipf/GetInterruptState.s b/edk2/MdePkg/Library/BaseLib/Ipf/GetInterruptState.s
new file mode 100644 (file)
index 0000000..66eb17f
--- /dev/null
@@ -0,0 +1,27 @@
+/// @file\r
+///   Retrieve of the interrupt state of the running processor for the Itanium\r
+///   architecture.\r
+///\r
+/// Copyright (c) 2006, Intel Corporation\r
+/// All rights reserved. This program and the accompanying materials\r
+/// are licensed and made available under the terms and conditions of the BSD License\r
+/// which accompanies this distribution.  The full text of the license may be found at\r
+/// http://opensource.org/licenses/bsd-license.php\r
+///\r
+/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+///\r
+/// Module Name:  GetInterruptState.s\r
+///\r
+///\r
+\r
+.auto\r
+.text\r
+\r
+.proc   GetInterruptState\r
+.type   GetInterruptState, @function\r
+GetInterruptState::\r
+        mov                 r8  = psr\r
+        dep.z               r8  = r8, 14, 1\r
+        br.ret.sptk.many    b0\r
+.endp   GetInterruptState\r
index 6863837..c21d742 100644 (file)
 .type   PalCallStatic, @function\r
 .regstk 5, 0, 0, 0\r
 PalCallStatic::\r
-        cmp.eq              p6 = r0, in0\r
+        cmp.eq              p15 = in0, r0\r
         mov                 r31 = in4\r
         mov                 r8  = ip\r
-(p6)    mov                 in0 = ar.k5\r
-        add                 r8  = (PalProcReturn - PalCallStatic), r8\r
-        mov                 in4 = b0\r
+\r
+(p15)   mov                 in0 = ar.k5\r
+        add                 r8  = (_PalProcReturn - PalCallStatic), r8\r
         mov                 r30 = in3\r
-        mov                 r29 = in2\r
+\r
+        mov                 in4 = psr\r
+        mov                 in3 = b0\r
         mov                 b7  = in0\r
-        mov                 in3 = psr\r
+\r
         rsm                 1 << 14                 // Disable interrupts\r
+        mov                 r29 = in2\r
         mov                 r28 = in1\r
-        mov                 in0 = 256\r
+\r
         mov                 b0  = r8\r
-        br.cond.sptk        b7\r
-PalProcReturn:\r
-        mov                 psr.l = in3\r
-        cmp.eq              p6 = in0, in1           // in1 == PAL_COPY_PAL?\r
-(p6)    cmp.eq              p6 = r0, r8             // Status == Success?\r
-(p6)    add                 in2 = r9, in2\r
-(p6)    mov                 ar.k5 = in2\r
-        mov                 b0  = in4\r
+        br.cond.sptk.many   b7\r
+\r
+_PalProcReturn:\r
+        mov                 psr.l = in4\r
+        mov                 b0  = in3\r
         br.ret.sptk.many    b0\r
 .endp   PalCallStatic\r
index 9eb8799..f09dbd5 100644 (file)
@@ -32,7 +32,7 @@ InternalSyncIncrement (
 \r
   do {\r
     OriginalValue = *Value;\r
-  } while (OriginalValue == InternalSyncCompareExchange32 (\r
+  } while (OriginalValue != InternalSyncCompareExchange32 (\r
                               Value,\r
                               OriginalValue,\r
                               OriginalValue + 1\r
@@ -50,7 +50,7 @@ InternalSyncDecrement (
 \r
   do {\r
     OriginalValue = *Value;\r
-  } while (OriginalValue == InternalSyncCompareExchange32 (\r
+  } while (OriginalValue != InternalSyncCompareExchange32 (\r
                               Value,\r
                               OriginalValue,\r
                               OriginalValue - 1\r
index 6863837..c21d742 100644 (file)
 .type   PalCallStatic, @function\r
 .regstk 5, 0, 0, 0\r
 PalCallStatic::\r
-        cmp.eq              p6 = r0, in0\r
+        cmp.eq              p15 = in0, r0\r
         mov                 r31 = in4\r
         mov                 r8  = ip\r
-(p6)    mov                 in0 = ar.k5\r
-        add                 r8  = (PalProcReturn - PalCallStatic), r8\r
-        mov                 in4 = b0\r
+\r
+(p15)   mov                 in0 = ar.k5\r
+        add                 r8  = (_PalProcReturn - PalCallStatic), r8\r
         mov                 r30 = in3\r
-        mov                 r29 = in2\r
+\r
+        mov                 in4 = psr\r
+        mov                 in3 = b0\r
         mov                 b7  = in0\r
-        mov                 in3 = psr\r
+\r
         rsm                 1 << 14                 // Disable interrupts\r
+        mov                 r29 = in2\r
         mov                 r28 = in1\r
-        mov                 in0 = 256\r
+\r
         mov                 b0  = r8\r
-        br.cond.sptk        b7\r
-PalProcReturn:\r
-        mov                 psr.l = in3\r
-        cmp.eq              p6 = in0, in1           // in1 == PAL_COPY_PAL?\r
-(p6)    cmp.eq              p6 = r0, r8             // Status == Success?\r
-(p6)    add                 in2 = r9, in2\r
-(p6)    mov                 ar.k5 = in2\r
-        mov                 b0  = in4\r
+        br.cond.sptk.many   b7\r
+\r
+_PalProcReturn:\r
+        mov                 psr.l = in4\r
+        mov                 b0  = in3\r
         br.ret.sptk.many    b0\r
 .endp   PalCallStatic\r