From 23086ba84cbb13350a2464b857b197eef67f1361 Mon Sep 17 00:00:00 2001 From: mdkinney Date: Tue, 19 Sep 2006 19:04:40 +0000 Subject: [PATCH] Optimize the size of the Base Library for the MSFT 32-bit tool chains by taking advantage of inline assembly. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1567 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/BaseLib/BaseLib.msa | 199 +++++++++--------- MdePkg/Library/BaseLib/Ia32/ARShiftU64.c | 36 ++++ MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.c | 28 +++ MdePkg/Library/BaseLib/Ia32/CpuFlushTlb.c | 29 +++ MdePkg/Library/BaseLib/Ia32/CpuId.c | 52 +++++ MdePkg/Library/BaseLib/Ia32/CpuIdEx.c | 54 +++++ MdePkg/Library/BaseLib/Ia32/CpuPause.c | 28 +++ MdePkg/Library/BaseLib/Ia32/CpuSleep.c | 28 +++ .../Library/BaseLib/Ia32/DisableInterrupts.c | 28 +++ MdePkg/Library/BaseLib/Ia32/DisablePaging32.c | 49 +++++ MdePkg/Library/BaseLib/Ia32/DivU64x32.c | 36 ++++ .../Library/BaseLib/Ia32/DivU64x32Remainder.c | 41 ++++ .../Library/BaseLib/Ia32/DivU64x64Remainder.c | 68 ++++++ .../BaseLib/Ia32/EnableDisableInterrupts.c | 31 +++ .../Library/BaseLib/Ia32/EnableInterrupts.c | 28 +++ MdePkg/Library/BaseLib/Ia32/EnablePaging32.c | 49 +++++ MdePkg/Library/BaseLib/Ia32/FlushCacheLine.c | 29 +++ MdePkg/Library/BaseLib/Ia32/FxRestore.c | 29 +++ MdePkg/Library/BaseLib/Ia32/FxSave.c | 29 +++ .../Ia32/InterlockedCompareExchange32.c | 33 +++ .../Ia32/InterlockedCompareExchange64.c | 35 +++ .../BaseLib/Ia32/InterlockedDecrement.c | 30 +++ .../BaseLib/Ia32/InterlockedIncrement.c | 30 +++ MdePkg/Library/BaseLib/Ia32/Invd.c | 28 +++ MdePkg/Library/BaseLib/Ia32/LRotU64.c | 39 ++++ MdePkg/Library/BaseLib/Ia32/LShiftU64.c | 36 ++++ MdePkg/Library/BaseLib/Ia32/LongJump.c | 38 ++++ MdePkg/Library/BaseLib/Ia32/ModU64x32.c | 35 +++ MdePkg/Library/BaseLib/Ia32/Monitor.c | 35 +++ MdePkg/Library/BaseLib/Ia32/MultU64x32.c | 33 +++ MdePkg/Library/BaseLib/Ia32/MultU64x64.c | 37 ++++ MdePkg/Library/BaseLib/Ia32/Mwait.c | 33 +++ MdePkg/Library/BaseLib/Ia32/RRotU64.c | 39 ++++ MdePkg/Library/BaseLib/Ia32/RShiftU64.c | 36 ++++ MdePkg/Library/BaseLib/Ia32/ReadCr0.c | 28 +++ MdePkg/Library/BaseLib/Ia32/ReadCr2.c | 28 +++ MdePkg/Library/BaseLib/Ia32/ReadCr3.c | 28 +++ MdePkg/Library/BaseLib/Ia32/ReadCr4.c | 30 +++ MdePkg/Library/BaseLib/Ia32/ReadCs.c | 29 +++ MdePkg/Library/BaseLib/Ia32/ReadDr0.c | 28 +++ MdePkg/Library/BaseLib/Ia32/ReadDr1.c | 28 +++ MdePkg/Library/BaseLib/Ia32/ReadDr2.c | 28 +++ MdePkg/Library/BaseLib/Ia32/ReadDr3.c | 28 +++ MdePkg/Library/BaseLib/Ia32/ReadDr4.c | 30 +++ MdePkg/Library/BaseLib/Ia32/ReadDr5.c | 30 +++ MdePkg/Library/BaseLib/Ia32/ReadDr6.c | 28 +++ MdePkg/Library/BaseLib/Ia32/ReadDr7.c | 28 +++ MdePkg/Library/BaseLib/Ia32/ReadDs.c | 29 +++ MdePkg/Library/BaseLib/Ia32/ReadEflags.c | 29 +++ MdePkg/Library/BaseLib/Ia32/ReadEs.c | 29 +++ MdePkg/Library/BaseLib/Ia32/ReadFs.c | 29 +++ MdePkg/Library/BaseLib/Ia32/ReadGdtr.c | 29 +++ MdePkg/Library/BaseLib/Ia32/ReadGs.c | 29 +++ MdePkg/Library/BaseLib/Ia32/ReadIdtr.c | 29 +++ MdePkg/Library/BaseLib/Ia32/ReadLdtr.c | 28 +++ MdePkg/Library/BaseLib/Ia32/ReadMm0.c | 33 +++ MdePkg/Library/BaseLib/Ia32/ReadMm1.c | 33 +++ MdePkg/Library/BaseLib/Ia32/ReadMm2.c | 33 +++ MdePkg/Library/BaseLib/Ia32/ReadMm3.c | 33 +++ MdePkg/Library/BaseLib/Ia32/ReadMm4.c | 33 +++ MdePkg/Library/BaseLib/Ia32/ReadMm5.c | 33 +++ MdePkg/Library/BaseLib/Ia32/ReadMm6.c | 33 +++ MdePkg/Library/BaseLib/Ia32/ReadMm7.c | 33 +++ MdePkg/Library/BaseLib/Ia32/ReadMsr64.c | 29 +++ MdePkg/Library/BaseLib/Ia32/ReadPmc.c | 29 +++ MdePkg/Library/BaseLib/Ia32/ReadSs.c | 29 +++ MdePkg/Library/BaseLib/Ia32/ReadTr.c | 28 +++ MdePkg/Library/BaseLib/Ia32/ReadTsc.c | 28 +++ MdePkg/Library/BaseLib/Ia32/SetJump.c | 47 +++++ MdePkg/Library/BaseLib/Ia32/SwapBytes64.c | 31 +++ MdePkg/Library/BaseLib/Ia32/Wbinvd.c | 28 +++ MdePkg/Library/BaseLib/Ia32/WriteCr0.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteCr2.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteCr3.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteCr4.c | 31 +++ MdePkg/Library/BaseLib/Ia32/WriteDr0.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteDr1.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteDr2.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteDr3.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteDr4.c | 31 +++ MdePkg/Library/BaseLib/Ia32/WriteDr5.c | 31 +++ MdePkg/Library/BaseLib/Ia32/WriteDr6.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteDr7.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteGdtr.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteIdtr.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteLdtr.c | 30 +++ MdePkg/Library/BaseLib/Ia32/WriteMm0.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteMm1.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteMm2.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteMm3.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteMm4.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteMm5.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteMm6.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteMm7.c | 29 +++ MdePkg/Library/BaseLib/Ia32/WriteMsr64.c | 32 +++ 95 files changed, 3115 insertions(+), 94 deletions(-) create mode 100644 MdePkg/Library/BaseLib/Ia32/ARShiftU64.c create mode 100644 MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.c create mode 100644 MdePkg/Library/BaseLib/Ia32/CpuFlushTlb.c create mode 100644 MdePkg/Library/BaseLib/Ia32/CpuId.c create mode 100644 MdePkg/Library/BaseLib/Ia32/CpuIdEx.c create mode 100644 MdePkg/Library/BaseLib/Ia32/CpuPause.c create mode 100644 MdePkg/Library/BaseLib/Ia32/CpuSleep.c create mode 100644 MdePkg/Library/BaseLib/Ia32/DisableInterrupts.c create mode 100644 MdePkg/Library/BaseLib/Ia32/DisablePaging32.c create mode 100644 MdePkg/Library/BaseLib/Ia32/DivU64x32.c create mode 100644 MdePkg/Library/BaseLib/Ia32/DivU64x32Remainder.c create mode 100644 MdePkg/Library/BaseLib/Ia32/DivU64x64Remainder.c create mode 100644 MdePkg/Library/BaseLib/Ia32/EnableDisableInterrupts.c create mode 100644 MdePkg/Library/BaseLib/Ia32/EnableInterrupts.c create mode 100644 MdePkg/Library/BaseLib/Ia32/EnablePaging32.c create mode 100644 MdePkg/Library/BaseLib/Ia32/FlushCacheLine.c create mode 100644 MdePkg/Library/BaseLib/Ia32/FxRestore.c create mode 100644 MdePkg/Library/BaseLib/Ia32/FxSave.c create mode 100644 MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange32.c create mode 100644 MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange64.c create mode 100644 MdePkg/Library/BaseLib/Ia32/InterlockedDecrement.c create mode 100644 MdePkg/Library/BaseLib/Ia32/InterlockedIncrement.c create mode 100644 MdePkg/Library/BaseLib/Ia32/Invd.c create mode 100644 MdePkg/Library/BaseLib/Ia32/LRotU64.c create mode 100644 MdePkg/Library/BaseLib/Ia32/LShiftU64.c create mode 100644 MdePkg/Library/BaseLib/Ia32/LongJump.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ModU64x32.c create mode 100644 MdePkg/Library/BaseLib/Ia32/Monitor.c create mode 100644 MdePkg/Library/BaseLib/Ia32/MultU64x32.c create mode 100644 MdePkg/Library/BaseLib/Ia32/MultU64x64.c create mode 100644 MdePkg/Library/BaseLib/Ia32/Mwait.c create mode 100644 MdePkg/Library/BaseLib/Ia32/RRotU64.c create mode 100644 MdePkg/Library/BaseLib/Ia32/RShiftU64.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadCr0.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadCr2.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadCr3.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadCr4.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadCs.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadDr0.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadDr1.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadDr2.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadDr3.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadDr4.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadDr5.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadDr6.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadDr7.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadDs.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadEflags.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadEs.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadFs.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadGdtr.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadGs.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadIdtr.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadLdtr.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadMm0.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadMm1.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadMm2.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadMm3.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadMm4.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadMm5.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadMm6.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadMm7.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadMsr64.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadPmc.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadSs.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadTr.c create mode 100644 MdePkg/Library/BaseLib/Ia32/ReadTsc.c create mode 100644 MdePkg/Library/BaseLib/Ia32/SetJump.c create mode 100644 MdePkg/Library/BaseLib/Ia32/SwapBytes64.c create mode 100644 MdePkg/Library/BaseLib/Ia32/Wbinvd.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteCr0.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteCr2.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteCr3.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteCr4.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteDr0.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteDr1.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteDr2.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteDr3.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteDr4.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteDr5.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteDr6.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteDr7.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteGdtr.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteIdtr.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteLdtr.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteMm0.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteMm1.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteMm2.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteMm3.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteMm4.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteMm5.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteMm6.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteMm7.c create mode 100644 MdePkg/Library/BaseLib/Ia32/WriteMsr64.c diff --git a/MdePkg/Library/BaseLib/BaseLib.msa b/MdePkg/Library/BaseLib/BaseLib.msa index 8924f4dbf5..508640775a 100644 --- a/MdePkg/Library/BaseLib/BaseLib.msa +++ b/MdePkg/Library/BaseLib/BaseLib.msa @@ -100,103 +100,114 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. Unaligned.c Ia32/Non-existing.c Ia32/InternalSwitchStack.c - Ia32/LShiftU64.asm - Ia32/RShiftU64.asm - Ia32/ARShiftU64.asm - Ia32/LRotU64.asm - Ia32/RRotU64.asm - Ia32/MultU64x32.asm - Ia32/MultU64x64.asm - Ia32/DivU64x32.asm - Ia32/ModU64x32.asm - Ia32/DivU64x32Remainder.asm - Ia32/DivU64x64Remainder.asm + + Ia32/ARShiftU64.c + Ia32/CpuBreakpoint.c + Ia32/CpuFlushTlb.c + Ia32/CpuSleep.c + Ia32/CpuId.c + Ia32/CpuIdEx.c + Ia32/CpuPause.c + Ia32/DisableInterrupts.c + Ia32/DisablePaging32.c + Ia32/DivU64x32.c + Ia32/DivU64x32Remainder.c + Ia32/DivU64x64Remainder.c Ia32/DivS64x64Remainder.c - Ia32/SwapBytes64.asm - Ia32/SetJump.asm - Ia32/LongJump.asm - Ia32/CpuId.asm - Ia32/CpuIdEx.asm - Ia32/ReadEflags.asm - Ia32/ReadMsr64.asm - Ia32/WriteMsr64.asm - Ia32/ReadCr0.asm - Ia32/ReadCr2.asm - Ia32/ReadCr3.asm - Ia32/ReadCr4.asm - Ia32/WriteCr0.asm - Ia32/WriteCr2.asm - Ia32/WriteCr3.asm - Ia32/WriteCr4.asm - Ia32/ReadDr0.asm - Ia32/ReadDr1.asm - Ia32/ReadDr2.asm - Ia32/ReadDr3.asm - Ia32/ReadDr4.asm - Ia32/ReadDr5.asm - Ia32/ReadDr6.asm - Ia32/ReadDr7.asm - Ia32/WriteDr0.asm - Ia32/WriteDr1.asm - Ia32/WriteDr2.asm - Ia32/WriteDr3.asm - Ia32/WriteDr4.asm - Ia32/WriteDr5.asm - Ia32/WriteDr6.asm - Ia32/WriteDr7.asm - Ia32/ReadCs.asm - Ia32/ReadDs.asm - Ia32/ReadEs.asm - Ia32/ReadFs.asm - Ia32/ReadGs.asm - Ia32/ReadSs.asm - Ia32/ReadTr.asm - Ia32/ReadGdtr.asm - Ia32/WriteGdtr.asm - Ia32/ReadIdtr.asm - Ia32/WriteIdtr.asm - Ia32/ReadLdtr.asm - Ia32/WriteLdtr.asm - Ia32/FxSave.asm - Ia32/FxRestore.asm - Ia32/ReadMm0.asm - Ia32/ReadMm1.asm - Ia32/ReadMm2.asm - Ia32/ReadMm3.asm - Ia32/ReadMm4.asm - Ia32/ReadMm5.asm - Ia32/ReadMm6.asm - Ia32/ReadMm7.asm - Ia32/WriteMm0.asm - Ia32/WriteMm1.asm - Ia32/WriteMm2.asm - Ia32/WriteMm3.asm - Ia32/WriteMm4.asm - Ia32/WriteMm5.asm - Ia32/WriteMm6.asm - Ia32/WriteMm7.asm - Ia32/ReadTsc.asm - Ia32/ReadPmc.asm - Ia32/Monitor.asm - Ia32/Mwait.asm - Ia32/EnablePaging32.asm - Ia32/DisablePaging32.asm + + Ia32/EnableDisableInterrupts.c + Ia32/EnableInterrupts.c + Ia32/EnablePaging32.c Ia32/EnablePaging64.asm - Ia32/Wbinvd.asm - Ia32/Invd.asm - Ia32/FlushCacheLine.asm - Ia32/InterlockedIncrement.asm - Ia32/InterlockedDecrement.asm - Ia32/InterlockedCompareExchange32.asm - Ia32/InterlockedCompareExchange64.asm - Ia32/EnableInterrupts.asm - Ia32/DisableInterrupts.asm - Ia32/EnableDisableInterrupts.asm - Ia32/CpuSleep.asm - Ia32/CpuPause.asm - Ia32/CpuBreakpoint.asm - Ia32/CpuFlushTlb.asm + + Ia32/FlushCacheLine.c + + Ia32/FxSave.c + Ia32/FxRestore.c + + Ia32/InterlockedIncrement.c + Ia32/InterlockedDecrement.c + Ia32/InterlockedCompareExchange32.c + Ia32/InterlockedCompareExchange64.c + Ia32/Invd.c + + Ia32/LongJump.c + Ia32/LRotU64.c + Ia32/LShiftU64.c + + Ia32/MultU64x32.c + Ia32/MultU64x64.c + Ia32/ModU64x32.c + Ia32/Monitor.c + Ia32/Mwait.c + + Ia32/ReadCr0.c + Ia32/ReadCr2.c + Ia32/ReadCr3.c + Ia32/ReadCr4.c + Ia32/ReadDr0.c + Ia32/ReadDr1.c + Ia32/ReadDr2.c + Ia32/ReadDr3.c + Ia32/ReadDr4.c + Ia32/ReadDr5.c + Ia32/ReadDr6.c + Ia32/ReadDr7.c + Ia32/ReadEflags.c + Ia32/ReadMm0.c + Ia32/ReadMm1.c + Ia32/ReadMm2.c + Ia32/ReadMm3.c + Ia32/ReadMm4.c + Ia32/ReadMm5.c + Ia32/ReadMm6.c + Ia32/ReadMm7.c + Ia32/ReadMsr64.c + Ia32/ReadCs.c + Ia32/ReadDs.c + Ia32/ReadEs.c + Ia32/ReadFs.c + Ia32/ReadGs.c + Ia32/ReadSs.c + Ia32/ReadTr.c + Ia32/ReadGdtr.c + Ia32/ReadIdtr.c + Ia32/ReadLdtr.c + Ia32/ReadTsc.c + Ia32/ReadPmc.c + Ia32/RShiftU64.c + Ia32/RRotU64.c + + Ia32/SetJump.c + Ia32/SwapBytes64.c Ia32/Thunk16.asm + + Ia32/WriteMsr64.c + Ia32/WriteCr0.c + Ia32/WriteCr2.c + Ia32/WriteCr3.c + Ia32/WriteCr4.c + Ia32/WriteDr0.c + Ia32/WriteDr1.c + Ia32/WriteDr2.c + Ia32/WriteDr3.c + Ia32/WriteDr4.c + Ia32/WriteDr5.c + Ia32/WriteDr6.c + Ia32/WriteDr7.c + Ia32/WriteGdtr.c + Ia32/WriteIdtr.c + Ia32/WriteLdtr.c + Ia32/WriteMm0.c + Ia32/WriteMm1.c + Ia32/WriteMm2.c + Ia32/WriteMm3.c + Ia32/WriteMm4.c + Ia32/WriteMm5.c + Ia32/WriteMm6.c + Ia32/WriteMm7.c + Ia32/Wbinvd.c + Ia32/LShiftU64.S Ia32/RShiftU64.S diff --git a/MdePkg/Library/BaseLib/Ia32/ARShiftU64.c b/MdePkg/Library/BaseLib/Ia32/ARShiftU64.c new file mode 100644 index 0000000000..3c4a5b3f51 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ARShiftU64.c @@ -0,0 +1,36 @@ +/** @file + 64-bit arithmetic right shift function for IA-32. + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +InternalMathARShiftU64 ( + IN UINT64 Operand, + IN UINTN Count + ) +{ + _asm { + mov cl, byte ptr [Count] + mov eax, dword ptr [Operand + 4] + cdq + test cl, 32 + cmovz edx, eax + cmovz eax, dword ptr [Operand + 0] + shrd eax, edx, cl + sar edx, cl + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.c b/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.c new file mode 100644 index 0000000000..99248321b5 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.c @@ -0,0 +1,28 @@ +/** @file + CpuBreakpoint function. + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +CpuBreakpoint ( + VOID + ) +{ + _asm { + int 3 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/CpuFlushTlb.c b/MdePkg/Library/BaseLib/Ia32/CpuFlushTlb.c new file mode 100644 index 0000000000..6845117e33 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/CpuFlushTlb.c @@ -0,0 +1,29 @@ +/** @file + CpuFlushTlb function. + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +CpuFlushTlb ( + VOID + ) +{ + _asm { + mov eax, cr3 + mov cr3, eax + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/CpuId.c b/MdePkg/Library/BaseLib/Ia32/CpuId.c new file mode 100644 index 0000000000..189e9e6be0 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/CpuId.c @@ -0,0 +1,52 @@ +/** @file + AsmCpuid function. + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT32 +EFIAPI +AsmCpuid ( + IN UINT32 Index, + OUT UINT32 *RegisterEax, OPTIONAL + OUT UINT32 *RegisterEbx, OPTIONAL + OUT UINT32 *RegisterEcx, OPTIONAL + OUT UINT32 *RegisterEdx OPTIONAL + ) +{ + _asm { + mov eax, Index + cpuid + push ecx + mov ecx, RegisterEax + jecxz SkipEax + mov [ecx], eax +SkipEax: + mov ecx, RegisterEbx + jecxz SkipEbx + mov [ecx], ebx +SkipEbx: + pop eax + mov ecx, RegisterEcx + jecxz SkipEcx + mov [ecx], eax +SkipEcx: + mov ecx, RegisterEdx + jecxz SkipEdx + mov [ecx], edx +SkipEdx: + mov eax, Index + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/CpuIdEx.c b/MdePkg/Library/BaseLib/Ia32/CpuIdEx.c new file mode 100644 index 0000000000..6ebbcbcf10 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/CpuIdEx.c @@ -0,0 +1,54 @@ +/** @file + AsmCpuidEx function. + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT32 +EFIAPI +AsmCpuidEx ( + IN UINT32 Index, + IN UINT32 SubIndex, + OUT UINT32 *RegisterEax, OPTIONAL + OUT UINT32 *RegisterEbx, OPTIONAL + OUT UINT32 *RegisterEcx, OPTIONAL + OUT UINT32 *RegisterEdx OPTIONAL + ) +{ + _asm { + mov eax, Index + mov ecx, SubIndex + cpuid + push ecx + mov ecx, RegisterEax + jecxz SkipEax + mov [ecx], eax +SkipEax: + mov ecx, RegisterEbx + jecxz SkipEbx + mov [ecx], ebx +SkipEbx: + pop eax + mov ecx, RegisterEcx + jecxz SkipEcx + mov [ecx], eax +SkipEcx: + mov ecx, RegisterEdx + jecxz SkipEdx + mov [ecx], edx +SkipEdx: + mov eax, Index + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/CpuPause.c b/MdePkg/Library/BaseLib/Ia32/CpuPause.c new file mode 100644 index 0000000000..e5206987d5 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/CpuPause.c @@ -0,0 +1,28 @@ +/** @file + CpuPause function. + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +CpuPause ( + VOID + ) +{ + _asm { + pause + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/CpuSleep.c b/MdePkg/Library/BaseLib/Ia32/CpuSleep.c new file mode 100644 index 0000000000..f813ff93f0 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/CpuSleep.c @@ -0,0 +1,28 @@ +/** @file + CpuSleep function. + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +CpuSleep ( + VOID + ) +{ + _asm { + hlt + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/DisableInterrupts.c b/MdePkg/Library/BaseLib/Ia32/DisableInterrupts.c new file mode 100644 index 0000000000..99d9e29d8a --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/DisableInterrupts.c @@ -0,0 +1,28 @@ +/** @file + DisableInterrupts function. + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +DisableInterrupts ( + VOID + ) +{ + _asm { + cli + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/DisablePaging32.c b/MdePkg/Library/BaseLib/Ia32/DisablePaging32.c new file mode 100644 index 0000000000..2e7f928bce --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/DisablePaging32.c @@ -0,0 +1,49 @@ +/** @file + AsmDisablePaging32 function. + + 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. + +**/ + +#if _MSC_EXTENSIONS + +__declspec (naked) +VOID +EFIAPI +InternalX86DisablePaging32 ( + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1, OPTIONAL + IN VOID *Context2, OPTIONAL + IN VOID *NewStack + ) +{ + _asm { + push ebp + mov ebp, esp + mov ebx, EntryPoint + mov ecx, Context1 + mov edx, Context2 + pushfd + pop edi // save EFLAGS to edi + cli + mov eax, cr0 + btr eax, 31 + mov esp, NewStack + mov cr0, eax + push edi + popfd // restore EFLAGS from edi + push edx + push ecx + call ebx + jmp $ // EntryPoint() should not return + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/DivU64x32.c b/MdePkg/Library/BaseLib/Ia32/DivU64x32.c new file mode 100644 index 0000000000..dd732158c8 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/DivU64x32.c @@ -0,0 +1,36 @@ +/** @file + Calculate the quotient of a 64-bit integer by a 32-bit integer + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +InternalMathDivU64x32 ( + IN UINT64 Dividend, + IN UINT32 Divisor + ) +{ + _asm { + mov eax, dword ptr [Dividend + 4] + mov ecx, Divisor + xor edx, edx + div ecx + push eax ; save quotient on stack + mov eax, dword ptr [Dividend] + div ecx + pop edx ; restore high-order dword of the quotient + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/DivU64x32Remainder.c b/MdePkg/Library/BaseLib/Ia32/DivU64x32Remainder.c new file mode 100644 index 0000000000..b7e354bda8 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/DivU64x32Remainder.c @@ -0,0 +1,41 @@ +/** @file + Set error flag for all division functions + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +InternalMathDivRemU64x32 ( + IN UINT64 Dividend, + IN UINT32 Divisor, + OUT UINT32 *Remainder + ) +{ + _asm { + mov ecx, Divisor + mov eax, dword ptr [Dividend + 4] + xor edx, edx + div ecx + push eax + mov eax, dword ptr [Dividend + 0] + div ecx + mov ecx, Remainder + jecxz RemainderNull // abandon remainder if Remainder == NULL + mov [ecx], edx +RemainderNull: + pop edx + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/DivU64x64Remainder.c b/MdePkg/Library/BaseLib/Ia32/DivU64x64Remainder.c new file mode 100644 index 0000000000..62034f7b84 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/DivU64x64Remainder.c @@ -0,0 +1,68 @@ +/** @file + Calculate the quotient of a 64-bit integer by a 64-bit integer and returns + both the quotient and the remainderSet error flag for all division functions + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +InternalMathDivRemU64x64 ( + IN UINT64 Dividend, + IN UINT64 Divisor, + OUT UINT64 *Remainder OPTIONAL + ) +{ + _asm { + mov edx, dword ptr [Dividend + 4] + mov eax, dword ptr [Dividend + 0] // edx:eax <- dividend + mov edi, edx + mov esi, eax // edi:esi <- dividend + mov ebx, dword ptr [Divisor + 0] // ecx:ebx <- divisor +BitLoop: + shr edx, 1 + rcr eax, 1 + shrd ebx, ecx, 1 + shr ecx, 1 + jnz BitLoop + div ebx + mov ebx, eax // ebx <- quotient + mov ecx, dword ptr [Divisor + 4] + mul dword ptr [Divisor] + imul ecx, ebx + add edx, ecx + mov ecx, Remainder + jc TooLarge // product > 2^64 + cmp edi, edx // compare high 32 bits + ja Correct + jb TooLarge // product > dividend + cmp esi, eax + jae Correct // product <= dividend +TooLarge: + dec ebx // adjust quotient by -1 + jecxz Return // return if Remainder == NULL + sub eax, dword ptr [Divisor + 0] + sbb edx, dword ptr [Divisor + 4] +Correct: + jecxz Return + sub esi, eax + sbb edi, edx // edi:esi <- remainder + mov [ecx], esi + mov [ecx + 4], edi +Return: + mov eax, ebx // eax <- quotient + xor edx, edx + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/EnableDisableInterrupts.c b/MdePkg/Library/BaseLib/Ia32/EnableDisableInterrupts.c new file mode 100644 index 0000000000..d6b0370e5f --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/EnableDisableInterrupts.c @@ -0,0 +1,31 @@ +/** @file + EnableDisableInterrupts function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +EnableDisableInterrupts ( + VOID + ) +{ + _asm { + sti + nop + nop + cli + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/EnableInterrupts.c b/MdePkg/Library/BaseLib/Ia32/EnableInterrupts.c new file mode 100644 index 0000000000..bead074dbb --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/EnableInterrupts.c @@ -0,0 +1,28 @@ +/** @file + EnableInterrupts function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +EnableInterrupts ( + VOID + ) +{ + _asm { + sti + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/EnablePaging32.c b/MdePkg/Library/BaseLib/Ia32/EnablePaging32.c new file mode 100644 index 0000000000..146089cab6 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/EnablePaging32.c @@ -0,0 +1,49 @@ +/** @file + AsmEnablePaging32 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +__declspec (naked) +VOID +EFIAPI +InternalX86EnablePaging32 ( + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1, OPTIONAL + IN VOID *Context2, OPTIONAL + IN VOID *NewStack + ) +{ + _asm { + push ebp + mov ebp, esp + mov ebx, EntryPoint + mov ecx, Context1 + mov edx, Context2 + pushfd + pop edi + cli + mov eax, cr0 + bts eax, 31 + mov esp, NewStack + mov cr0, eax + push edi + popfd + push edx + push ecx + call ebx + jmp $ + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/FlushCacheLine.c b/MdePkg/Library/BaseLib/Ia32/FlushCacheLine.c new file mode 100644 index 0000000000..6da213a6a9 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/FlushCacheLine.c @@ -0,0 +1,29 @@ +/** @file + AsmFlushCacheLine function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID * +EFIAPI +AsmFlushCacheLine ( + IN VOID *LinearAddress + ) +{ + _asm { + mov eax, LinearAddress + clflush [eax] + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/FxRestore.c b/MdePkg/Library/BaseLib/Ia32/FxRestore.c new file mode 100644 index 0000000000..e51b882d7b --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/FxRestore.c @@ -0,0 +1,29 @@ +/** @file + AsmFxRestore function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +InternalX86FxRestore ( + IN CONST IA32_FX_BUFFER *Buffer + ) +{ + _asm { + mov eax, Buffer + fxrstor [eax] + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/FxSave.c b/MdePkg/Library/BaseLib/Ia32/FxSave.c new file mode 100644 index 0000000000..8a34023600 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/FxSave.c @@ -0,0 +1,29 @@ +/** @file + AsmFxSave function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +InternalX86FxSave ( + OUT IA32_FX_BUFFER *Buffer + ) +{ + _asm { + mov eax, Buffer + fxsave [eax] + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange32.c b/MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange32.c new file mode 100644 index 0000000000..244089617e --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange32.c @@ -0,0 +1,33 @@ +/** @file + InterlockedCompareExchange32 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT32 +EFIAPI +InternalSyncCompareExchange32 ( + IN UINT32 *Value, + IN UINT32 CompareValue, + IN UINT32 ExchangeValue + ) +{ + _asm { + mov ecx, Value + mov eax, CompareValue + mov edx, ExchangeValue + lock cmpxchg [ecx], edx + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange64.c b/MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange64.c new file mode 100644 index 0000000000..5bddf71432 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange64.c @@ -0,0 +1,35 @@ +/** @file + InterlockedCompareExchange64 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +InternalSyncCompareExchange64 ( + IN UINT64 *Value, + IN UINT64 CompareValue, + IN UINT64 ExchangeValue + ) +{ + _asm { + mov esi, Value + mov eax, dword ptr [CompareValue + 0] + mov edx, dword ptr [CompareValue + 4] + mov ebx, dword ptr [ExchangeValue + 0] + mov ecx, dword ptr [ExchangeValue + 4] + lock cmpxchg8b qword ptr [esi] + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/InterlockedDecrement.c b/MdePkg/Library/BaseLib/Ia32/InterlockedDecrement.c new file mode 100644 index 0000000000..f0d5fb249a --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/InterlockedDecrement.c @@ -0,0 +1,30 @@ +/** @file + InterlockedDecrement function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT32 +EFIAPI +InternalSyncDecrement ( + IN UINT32 *Value + ) +{ + _asm { + mov eax, Value + lock dec dword ptr [eax] + mov eax, [eax] + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/InterlockedIncrement.c b/MdePkg/Library/BaseLib/Ia32/InterlockedIncrement.c new file mode 100644 index 0000000000..0854ace86f --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/InterlockedIncrement.c @@ -0,0 +1,30 @@ +/** @file + InterLockedIncrement function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT32 +EFIAPI +InternalSyncIncrement ( + IN UINT32 *Value + ) +{ + _asm { + mov eax, Value + lock inc dword ptr [eax] + mov eax, [eax] + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/Invd.c b/MdePkg/Library/BaseLib/Ia32/Invd.c new file mode 100644 index 0000000000..113bdd6975 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/Invd.c @@ -0,0 +1,28 @@ +/** @file + AsmInvd function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +AsmInvd ( + VOID + ) +{ + _asm { + invd + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/LRotU64.c b/MdePkg/Library/BaseLib/Ia32/LRotU64.c new file mode 100644 index 0000000000..e45d2dea49 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/LRotU64.c @@ -0,0 +1,39 @@ +/** @file + 64-bit left rotation for Ia32 + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +InternalMathLRotU64 ( + IN UINT64 Operand, + IN UINTN Count + ) +{ + _asm { + mov cl, byte ptr [Count] + mov edx, dword ptr [Operand + 4] + mov eax, dword ptr [Operand + 0] + shld ebx, edx, cl + shld edx, eax, cl + ror ebx, cl + shld eax, ebx, cl + test cl, 32 ; Count >= 32? + cmovnz ecx, eax + cmovnz eax, edx + cmovnz edx, ecx + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/LShiftU64.c b/MdePkg/Library/BaseLib/Ia32/LShiftU64.c new file mode 100644 index 0000000000..64f9e373b7 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/LShiftU64.c @@ -0,0 +1,36 @@ +/** @file + 64-bit left shift function for IA-32. + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +InternalMathLShiftU64 ( + IN UINT64 Operand, + IN UINTN Count + ) +{ + _asm { + mov cl, byte ptr [Count] + xor eax, eax + mov edx, dword ptr [Operand + 0] + test cl, 32 // Count >= 32? + cmovz eax, edx + cmovz edx, dword ptr [Operand + 4] + shld edx, eax, cl + shl eax, cl + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/LongJump.c b/MdePkg/Library/BaseLib/Ia32/LongJump.c new file mode 100644 index 0000000000..34447732a1 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/LongJump.c @@ -0,0 +1,38 @@ +/** @file + Implementation of _LongJump() on IA-32. + + 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. + +**/ + +#if _MSC_EXTENSIONS + +__declspec (naked) +VOID +EFIAPI +InternalLongJump ( + IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer, + IN UINTN Value + ) +{ + _asm { + pop eax ; skip return address + pop edx ; edx <- JumpBuffer + pop eax ; eax <- Value + mov ebx, [edx] + mov esi, [edx + 4] + mov edi, [edx + 8] + mov ebp, [edx + 12] + mov esp, [edx + 16] + jmp dword ptr [edx + 20] + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ModU64x32.c b/MdePkg/Library/BaseLib/Ia32/ModU64x32.c new file mode 100644 index 0000000000..2433bcc165 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ModU64x32.c @@ -0,0 +1,35 @@ +/** @file + Calculate the remainder of a 64-bit integer by a 32-bit integer + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT32 +EFIAPI +InternalMathModU64x32 ( + IN UINT64 Dividend, + IN UINT32 Divisor + ) +{ + _asm { + mov eax, dword ptr [Dividend + 4] + mov ecx, Divisor + xor edx, edx + div ecx + mov eax, dword ptr [Dividend + 0] + div ecx + mov eax, edx + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/Monitor.c b/MdePkg/Library/BaseLib/Ia32/Monitor.c new file mode 100644 index 0000000000..ec29a0df2d --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/Monitor.c @@ -0,0 +1,35 @@ +/** @file + AsmMonitor function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmMonitor ( + IN UINTN RegisterEax, + IN UINTN RegisterEcx, + IN UINTN RegisterEdx + ) +{ + _asm { + mov eax, RegisterEax + mov ecx, RegisterEcx + mov edx, RegisterEdx + _emit 0x0f // monitor + _emit 0x01 + _emit 0xc8 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/MultU64x32.c b/MdePkg/Library/BaseLib/Ia32/MultU64x32.c new file mode 100644 index 0000000000..a2444e9af4 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/MultU64x32.c @@ -0,0 +1,33 @@ +/** @file + Calculate the product of a 64-bit integer and a 32-bit integer + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +InternalMathMultU64x32 ( + IN UINT64 Multiplicand, + IN UINT32 Multiplier + ) +{ + _asm { + mov ecx, Multiplier + mov eax, ecx + imul ecx, dword ptr [Multiplicand + 4] // overflow not detectable + mul dword ptr [Multiplicand + 0] + add edx, ecx + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/MultU64x64.c b/MdePkg/Library/BaseLib/Ia32/MultU64x64.c new file mode 100644 index 0000000000..71757bddc0 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/MultU64x64.c @@ -0,0 +1,37 @@ +/** @file + Calculate the product of a 64-bit integer and another 64-bit integer + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +InternalMathMultU64x64 ( + IN UINT64 Multiplicand, + IN UINT64 Multiplier + ) +{ + _asm { + mov ebx, dword ptr [Multiplicand + 0] + mov edx, dword ptr [Multiplier + 0] + mov ecx, ebx + mov eax, edx + imul ebx, dword ptr [Multiplier + 4] + imul edx, dword ptr [Multiplicand + 4] + add ebx, edx + mul ecx + add edx, ebx + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/Mwait.c b/MdePkg/Library/BaseLib/Ia32/Mwait.c new file mode 100644 index 0000000000..b6ad777939 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/Mwait.c @@ -0,0 +1,33 @@ +/** @file + AsmMwait function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmMwait ( + IN UINTN RegisterEax, + IN UINTN RegisterEcx + ) +{ + _asm { + mov eax, RegisterEax + mov ecx, RegisterEcx + _emit 0x0f // mwait + _emit 0x01 + _emit 0xC9 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/RRotU64.c b/MdePkg/Library/BaseLib/Ia32/RRotU64.c new file mode 100644 index 0000000000..78ac484afc --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/RRotU64.c @@ -0,0 +1,39 @@ +/** @file + 64-bit right rotation for Ia32 + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +InternalMathRRotU64 ( + IN UINT64 Operand, + IN UINTN Count + ) +{ + _asm { + mov cl, byte ptr [Count] + mov eax, dword ptr [Operand + 0] + mov edx, dword ptr [Operand + 4] + shrd ebx, eax, cl + shrd eax, edx, cl + rol ebx, cl + shrd edx, ebx, cl + test cl, 32 // Count >= 32? + cmovnz ecx, eax + cmovnz eax, edx + cmovnz edx, ecx + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/RShiftU64.c b/MdePkg/Library/BaseLib/Ia32/RShiftU64.c new file mode 100644 index 0000000000..a57539d553 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/RShiftU64.c @@ -0,0 +1,36 @@ +/** @file + 64-bit logical right shift function for IA-32 + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +InternalMathRShiftU64 ( + IN UINT64 Operand, + IN UINTN Count + ) +{ + _asm { + mov cl, byte ptr [Count] + xor edx, edx + mov eax, dword ptr [Operand + 4] + test cl, 32 + cmovz edx, eax + cmovz eax, dword ptr [Operand + 0] + shrd eax, edx, cl + shr edx, cl + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadCr0.c b/MdePkg/Library/BaseLib/Ia32/ReadCr0.c new file mode 100644 index 0000000000..4931775bef --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadCr0.c @@ -0,0 +1,28 @@ +/** @file + AsmReadCr0 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmReadCr0 ( + VOID + ) +{ + __asm { + mov eax, cr0 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadCr2.c b/MdePkg/Library/BaseLib/Ia32/ReadCr2.c new file mode 100644 index 0000000000..09a4230fd5 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadCr2.c @@ -0,0 +1,28 @@ +/** @file + AsmReadCr2 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmReadCr2 ( + VOID + ) +{ + __asm { + mov eax, cr2 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadCr3.c b/MdePkg/Library/BaseLib/Ia32/ReadCr3.c new file mode 100644 index 0000000000..02462efdfb --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadCr3.c @@ -0,0 +1,28 @@ +/** @file + AsmReadCr3 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmReadCr3 ( + VOID + ) +{ + __asm { + mov eax, cr3 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadCr4.c b/MdePkg/Library/BaseLib/Ia32/ReadCr4.c new file mode 100644 index 0000000000..bc5dd727f0 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadCr4.c @@ -0,0 +1,30 @@ +/** @file + AsmReadCr4 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmReadCr4 ( + VOID + ) +{ + __asm { + _emit 0x0f // mov eax, cr4 + _emit 0x20 + _emit 0xE0 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadCs.c b/MdePkg/Library/BaseLib/Ia32/ReadCs.c new file mode 100644 index 0000000000..5634e49530 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadCs.c @@ -0,0 +1,29 @@ +/** @file + AsmReadCs function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT16 +EFIAPI +AsmReadCs ( + VOID + ) +{ + __asm { + xor eax, eax + mov ax, cs + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr0.c b/MdePkg/Library/BaseLib/Ia32/ReadDr0.c new file mode 100644 index 0000000000..cc91973295 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr0.c @@ -0,0 +1,28 @@ +/** @file + AsmReadDr0 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmReadDr0 ( + VOID + ) +{ + __asm { + mov eax, dr0 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr1.c b/MdePkg/Library/BaseLib/Ia32/ReadDr1.c new file mode 100644 index 0000000000..10e8a48081 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr1.c @@ -0,0 +1,28 @@ +/** @file + AsmReadDr1 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmReadDr1 ( + VOID + ) +{ + __asm { + mov eax, dr1 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr2.c b/MdePkg/Library/BaseLib/Ia32/ReadDr2.c new file mode 100644 index 0000000000..bbacec40bb --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr2.c @@ -0,0 +1,28 @@ +/** @file + AsmReadDr2 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmReadDr2 ( + VOID + ) +{ + __asm { + mov eax, dr2 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr3.c b/MdePkg/Library/BaseLib/Ia32/ReadDr3.c new file mode 100644 index 0000000000..c4390d01b6 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr3.c @@ -0,0 +1,28 @@ +/** @file + AsmReadDr3 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmReadDr3 ( + VOID + ) +{ + __asm { + mov eax, dr3 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr4.c b/MdePkg/Library/BaseLib/Ia32/ReadDr4.c new file mode 100644 index 0000000000..fab9f67e0e --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr4.c @@ -0,0 +1,30 @@ +/** @file + AsmReadDr4 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmReadDr4 ( + VOID + ) +{ + __asm { + _emit 0x0f + _emit 0x21 + _emit 0xe0 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr5.c b/MdePkg/Library/BaseLib/Ia32/ReadDr5.c new file mode 100644 index 0000000000..6b0db98659 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr5.c @@ -0,0 +1,30 @@ +/** @file + AsmReadDr5 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmReadDr5 ( + VOID + ) +{ + __asm { + _emit 0x0f + _emit 0x21 + _emit 0xe8 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr6.c b/MdePkg/Library/BaseLib/Ia32/ReadDr6.c new file mode 100644 index 0000000000..8a84658222 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr6.c @@ -0,0 +1,28 @@ +/** @file + AsmReadDr6 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmReadDr6 ( + VOID + ) +{ + __asm { + mov eax, dr6 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr7.c b/MdePkg/Library/BaseLib/Ia32/ReadDr7.c new file mode 100644 index 0000000000..02794f8b8b --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr7.c @@ -0,0 +1,28 @@ +/** @file + AsmReadDr7 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmReadDr7 ( + VOID + ) +{ + __asm { + mov eax, dr7 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDs.c b/MdePkg/Library/BaseLib/Ia32/ReadDs.c new file mode 100644 index 0000000000..c757928372 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadDs.c @@ -0,0 +1,29 @@ +/** @file + AsmReadDs function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT16 +EFIAPI +AsmReadDs ( + VOID + ) +{ + __asm { + xor eax, eax + mov ax, ds + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadEflags.c b/MdePkg/Library/BaseLib/Ia32/ReadEflags.c new file mode 100644 index 0000000000..49901b08d6 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadEflags.c @@ -0,0 +1,29 @@ +/** @file + AsmReadEflags function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmReadEflags ( + VOID + ) +{ + __asm { + pushfd + pop eax + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadEs.c b/MdePkg/Library/BaseLib/Ia32/ReadEs.c new file mode 100644 index 0000000000..dcd04eeb16 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadEs.c @@ -0,0 +1,29 @@ +/** @file + AsmReadEs function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT16 +EFIAPI +AsmReadEs ( + VOID + ) +{ + __asm { + xor eax, eax + mov ax, es + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadFs.c b/MdePkg/Library/BaseLib/Ia32/ReadFs.c new file mode 100644 index 0000000000..73f6d0e332 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadFs.c @@ -0,0 +1,29 @@ +/** @file + AsmReadFs function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT16 +EFIAPI +AsmReadFs ( + VOID + ) +{ + __asm { + xor eax, eax + mov ax, fs + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadGdtr.c b/MdePkg/Library/BaseLib/Ia32/ReadGdtr.c new file mode 100644 index 0000000000..f98e9f85ce --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadGdtr.c @@ -0,0 +1,29 @@ +/** @file + AsmReadGdtr function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +InternalX86ReadGdtr ( + OUT IA32_DESCRIPTOR *Gdtr + ) +{ + _asm { + mov eax, Gdtr + sgdt fword ptr [eax] + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadGs.c b/MdePkg/Library/BaseLib/Ia32/ReadGs.c new file mode 100644 index 0000000000..47da6e716a --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadGs.c @@ -0,0 +1,29 @@ +/** @file + AsmReadGs function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT16 +EFIAPI +AsmReadGs ( + VOID + ) +{ + __asm { + xor eax, eax + mov ax, gs + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadIdtr.c b/MdePkg/Library/BaseLib/Ia32/ReadIdtr.c new file mode 100644 index 0000000000..d39f72f4f9 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadIdtr.c @@ -0,0 +1,29 @@ +/** @file + AsmReadIdtr function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +InternalX86ReadIdtr ( + OUT IA32_DESCRIPTOR *Idtr + ) +{ + _asm { + mov eax, Idtr + sidt fword ptr [eax] + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadLdtr.c b/MdePkg/Library/BaseLib/Ia32/ReadLdtr.c new file mode 100644 index 0000000000..df3f983108 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadLdtr.c @@ -0,0 +1,28 @@ +/** @file + AsmReadLdtr function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT16 +EFIAPI +AsmReadLdtr ( + VOID + ) +{ + _asm { + sldt ax + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm0.c b/MdePkg/Library/BaseLib/Ia32/ReadMm0.c new file mode 100644 index 0000000000..16ecd24e7e --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm0.c @@ -0,0 +1,33 @@ +/** @file + AsmReadMm0 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +AsmReadMm0 ( + VOID + ) +{ + _asm { + push eax + push eax + movq [esp], mm0 + pop eax + pop edx + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm1.c b/MdePkg/Library/BaseLib/Ia32/ReadMm1.c new file mode 100644 index 0000000000..7026e18d52 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm1.c @@ -0,0 +1,33 @@ +/** @file + AsmReadMm1 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +AsmReadMm1 ( + VOID + ) +{ + _asm { + push eax + push eax + movq [esp], mm1 + pop eax + pop edx + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm2.c b/MdePkg/Library/BaseLib/Ia32/ReadMm2.c new file mode 100644 index 0000000000..33188eb11e --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm2.c @@ -0,0 +1,33 @@ +/** @file + AsmReadMm2 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +AsmReadMm2 ( + VOID + ) +{ + _asm { + push eax + push eax + movq [esp], mm2 + pop eax + pop edx + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm3.c b/MdePkg/Library/BaseLib/Ia32/ReadMm3.c new file mode 100644 index 0000000000..2690e00dda --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm3.c @@ -0,0 +1,33 @@ +/** @file + AsmReadMm3 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +AsmReadMm3 ( + VOID + ) +{ + _asm { + push eax + push eax + movq [esp], mm3 + pop eax + pop edx + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm4.c b/MdePkg/Library/BaseLib/Ia32/ReadMm4.c new file mode 100644 index 0000000000..6e8f9d02f1 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm4.c @@ -0,0 +1,33 @@ +/** @file + AsmReadMm4 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +AsmReadMm4 ( + VOID + ) +{ + _asm { + push eax + push eax + movq [esp], mm4 + pop eax + pop edx + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm5.c b/MdePkg/Library/BaseLib/Ia32/ReadMm5.c new file mode 100644 index 0000000000..ed3d37c416 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm5.c @@ -0,0 +1,33 @@ +/** @file + AsmReadMm5 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +AsmReadMm5 ( + VOID + ) +{ + _asm { + push eax + push eax + movq [esp], mm5 + pop eax + pop edx + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm6.c b/MdePkg/Library/BaseLib/Ia32/ReadMm6.c new file mode 100644 index 0000000000..9aa892e89c --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm6.c @@ -0,0 +1,33 @@ +/** @file + AsmReadMm6 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +AsmReadMm6 ( + VOID + ) +{ + _asm { + push eax + push eax + movq [esp], mm6 + pop eax + pop edx + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm7.c b/MdePkg/Library/BaseLib/Ia32/ReadMm7.c new file mode 100644 index 0000000000..93ddfdb1be --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm7.c @@ -0,0 +1,33 @@ +/** @file + AsmReadMm7 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +AsmReadMm7 ( + VOID + ) +{ + _asm { + push eax + push eax + movq [esp], mm7 + pop eax + pop edx + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMsr64.c b/MdePkg/Library/BaseLib/Ia32/ReadMsr64.c new file mode 100644 index 0000000000..3b4d0ca480 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadMsr64.c @@ -0,0 +1,29 @@ +/** @file + AsmReadMsr64 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +AsmReadMsr64 ( + IN UINT32 Index + ) +{ + _asm { + mov ecx, Index + rdmsr + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadPmc.c b/MdePkg/Library/BaseLib/Ia32/ReadPmc.c new file mode 100644 index 0000000000..bf5f5d8537 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadPmc.c @@ -0,0 +1,29 @@ +/** @file + AsmReadPmc function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +AsmReadPmc ( + IN UINT32 PmcIndex + ) +{ + _asm { + mov ecx, PmcIndex + rdpmc + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadSs.c b/MdePkg/Library/BaseLib/Ia32/ReadSs.c new file mode 100644 index 0000000000..9fd5d9669e --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadSs.c @@ -0,0 +1,29 @@ +/** @file + AsmReadSs function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT16 +EFIAPI +AsmReadSs ( + VOID + ) +{ + __asm { + xor eax, eax + mov ax, ss + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadTr.c b/MdePkg/Library/BaseLib/Ia32/ReadTr.c new file mode 100644 index 0000000000..7f7f1d5cdf --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadTr.c @@ -0,0 +1,28 @@ +/** @file + AsmReadTr function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT16 +EFIAPI +AsmReadTr ( + VOID + ) +{ + _asm { + str ax + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/ReadTsc.c b/MdePkg/Library/BaseLib/Ia32/ReadTsc.c new file mode 100644 index 0000000000..54cbd90aad --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ReadTsc.c @@ -0,0 +1,28 @@ +/** @file + AsmReadTsc function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +AsmReadTsc ( + VOID + ) +{ + _asm { + rdtsc + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/SetJump.c b/MdePkg/Library/BaseLib/Ia32/SetJump.c new file mode 100644 index 0000000000..9854334eb2 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/SetJump.c @@ -0,0 +1,47 @@ +/** @file + Implementation of SetJump() on IA-32. + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +InternalAssertJumpBuffer ( + IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer + ); + +_declspec (naked) +UINTN +EFIAPI +SetJump ( + OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer + ) +{ + _asm { + push [esp + 4] + call InternalAssertJumpBuffer + pop ecx + pop ecx + mov edx, [esp] + mov [edx], ebx + mov [edx + 4], esi + mov [edx + 8], edi + mov [edx + 12], ebp + mov [edx + 16], esp + mov [edx + 20], ecx + xor eax, eax + jmp ecx + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/SwapBytes64.c b/MdePkg/Library/BaseLib/Ia32/SwapBytes64.c new file mode 100644 index 0000000000..acd0b82841 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/SwapBytes64.c @@ -0,0 +1,31 @@ +/** @file + Implementation of 64-bit swap bytes + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +InternalMathSwapBytes64 ( + IN UINT64 Operand + ) +{ + _asm { + mov eax, dword ptr [Operand + 4] + mov edx, dword ptr [Operand + 0] + bswap eax + bswap edx + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/Wbinvd.c b/MdePkg/Library/BaseLib/Ia32/Wbinvd.c new file mode 100644 index 0000000000..25e794d170 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/Wbinvd.c @@ -0,0 +1,28 @@ +/** @file + AsmWbinvd function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +AsmWbinvd ( + VOID + ) +{ + _asm { + wbinvd + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteCr0.c b/MdePkg/Library/BaseLib/Ia32/WriteCr0.c new file mode 100644 index 0000000000..a120250fd7 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteCr0.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteCr0 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmWriteCr0 ( + UINTN Value + ) +{ + _asm { + mov eax, Value + mov cr0, eax + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteCr2.c b/MdePkg/Library/BaseLib/Ia32/WriteCr2.c new file mode 100644 index 0000000000..45f1faa12f --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteCr2.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteCr2 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmWriteCr2 ( + UINTN Value + ) +{ + _asm { + mov eax, Value + mov cr2, eax + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteCr3.c b/MdePkg/Library/BaseLib/Ia32/WriteCr3.c new file mode 100644 index 0000000000..e4606a7bc4 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteCr3.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteCr3 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmWriteCr3 ( + UINTN Value + ) +{ + _asm { + mov eax, Value + mov cr3, eax + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteCr4.c b/MdePkg/Library/BaseLib/Ia32/WriteCr4.c new file mode 100644 index 0000000000..772a463ef5 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteCr4.c @@ -0,0 +1,31 @@ +/** @file + AsmWriteCr4 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmWriteCr4 ( + UINTN Value + ) +{ + _asm { + mov eax, Value + _emit 0x0f // mov cr4, eax + _emit 0x22 + _emit 0xE0 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr0.c b/MdePkg/Library/BaseLib/Ia32/WriteDr0.c new file mode 100644 index 0000000000..e511a6e0e4 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr0.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteDr0 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmWriteDr0 ( + IN UINTN Value + ) +{ + _asm { + mov eax, Value + mov dr0, eax + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr1.c b/MdePkg/Library/BaseLib/Ia32/WriteDr1.c new file mode 100644 index 0000000000..74f4877ac0 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr1.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteDr1 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmWriteDr1 ( + IN UINTN Value + ) +{ + _asm { + mov eax, Value + mov dr1, eax + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr2.c b/MdePkg/Library/BaseLib/Ia32/WriteDr2.c new file mode 100644 index 0000000000..4ecbcb1795 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr2.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteDr2 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmWriteDr2 ( + IN UINTN Value + ) +{ + _asm { + mov eax, Value + mov dr2, eax + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr3.c b/MdePkg/Library/BaseLib/Ia32/WriteDr3.c new file mode 100644 index 0000000000..f8a4b45058 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr3.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteDr3 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmWriteDr3 ( + IN UINTN Value + ) +{ + _asm { + mov eax, Value + mov dr3, eax + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr4.c b/MdePkg/Library/BaseLib/Ia32/WriteDr4.c new file mode 100644 index 0000000000..546f92cf89 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr4.c @@ -0,0 +1,31 @@ +/** @file + AsmWriteDr4 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmWriteDr4 ( + IN UINTN Value + ) +{ + _asm { + mov eax, Value + _emit 0x0f // mov dr4, eax + _emit 0x23 + _emit 0xe0 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr5.c b/MdePkg/Library/BaseLib/Ia32/WriteDr5.c new file mode 100644 index 0000000000..e2f72e3e92 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr5.c @@ -0,0 +1,31 @@ +/** @file + AsmWriteDr5 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmWriteDr5 ( + IN UINTN Value + ) +{ + _asm { + mov eax, Value + _emit 0x0f // mov dr5, eax + _emit 0x23 + _emit 0xe8 + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr6.c b/MdePkg/Library/BaseLib/Ia32/WriteDr6.c new file mode 100644 index 0000000000..1b50f4deb9 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr6.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteDr6 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmWriteDr6 ( + IN UINTN Value + ) +{ + _asm { + mov eax, Value + mov dr6, eax + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr7.c b/MdePkg/Library/BaseLib/Ia32/WriteDr7.c new file mode 100644 index 0000000000..3f5f420751 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr7.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteDr7 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINTN +EFIAPI +AsmWriteDr7 ( + IN UINTN Value + ) +{ + _asm { + mov eax, Value + mov dr7, eax + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteGdtr.c b/MdePkg/Library/BaseLib/Ia32/WriteGdtr.c new file mode 100644 index 0000000000..b264651358 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteGdtr.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteGdtr function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +InternalX86WriteGdtr ( + IN CONST IA32_DESCRIPTOR *Gdtr + ) +{ + _asm { + mov eax, Gdtr + lgdt fword ptr [eax] + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteIdtr.c b/MdePkg/Library/BaseLib/Ia32/WriteIdtr.c new file mode 100644 index 0000000000..4fd530fc7b --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteIdtr.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteIdtr function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +InternalX86WriteIdtr ( + IN CONST IA32_DESCRIPTOR *Idtr + ) +{ + _asm { + mov eax, Idtr + lidt fword ptr [eax] + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteLdtr.c b/MdePkg/Library/BaseLib/Ia32/WriteLdtr.c new file mode 100644 index 0000000000..93b51424e3 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteLdtr.c @@ -0,0 +1,30 @@ +/** @file + AsmWriteLdtr function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +AsmWriteLdtr ( + IN UINT16 Ldtr + ) +{ + _asm { + xor eax, eax + mov ax, Ldtr + lldt ax + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm0.c b/MdePkg/Library/BaseLib/Ia32/WriteMm0.c new file mode 100644 index 0000000000..c4abb9c458 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm0.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteMm0 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +AsmWriteMm0 ( + IN UINT64 Value + ) +{ + _asm { + movq mm0, qword ptr [Value] + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm1.c b/MdePkg/Library/BaseLib/Ia32/WriteMm1.c new file mode 100644 index 0000000000..f64b338d8c --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm1.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteMm1 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +AsmWriteMm1 ( + IN UINT64 Value + ) +{ + _asm { + movq mm1, qword ptr [Value] + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm2.c b/MdePkg/Library/BaseLib/Ia32/WriteMm2.c new file mode 100644 index 0000000000..238a7c4b95 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm2.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteMm2 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +AsmWriteMm2 ( + IN UINT64 Value + ) +{ + _asm { + movq mm2, qword ptr [Value] + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm3.c b/MdePkg/Library/BaseLib/Ia32/WriteMm3.c new file mode 100644 index 0000000000..5cc01b6f27 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm3.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteMm3 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +AsmWriteMm3 ( + IN UINT64 Value + ) +{ + _asm { + movq mm3, qword ptr [Value] + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm4.c b/MdePkg/Library/BaseLib/Ia32/WriteMm4.c new file mode 100644 index 0000000000..0ad39dc489 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm4.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteMm4 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +AsmWriteMm4 ( + IN UINT64 Value + ) +{ + _asm { + movq mm4, qword ptr [Value] + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm5.c b/MdePkg/Library/BaseLib/Ia32/WriteMm5.c new file mode 100644 index 0000000000..0904dc8c70 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm5.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteMm5 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +AsmWriteMm5 ( + IN UINT64 Value + ) +{ + _asm { + movq mm5, qword ptr [Value] + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm6.c b/MdePkg/Library/BaseLib/Ia32/WriteMm6.c new file mode 100644 index 0000000000..8003f7f503 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm6.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteMm6 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +AsmWriteMm6 ( + IN UINT64 Value + ) +{ + _asm { + movq mm6, qword ptr [Value] + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm7.c b/MdePkg/Library/BaseLib/Ia32/WriteMm7.c new file mode 100644 index 0000000000..8085d03c82 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm7.c @@ -0,0 +1,29 @@ +/** @file + AsmWriteMm7 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +VOID +EFIAPI +AsmWriteMm7 ( + IN UINT64 Value + ) +{ + _asm { + movq mm7, qword ptr [Value] + emms + } +} + +#endif diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMsr64.c b/MdePkg/Library/BaseLib/Ia32/WriteMsr64.c new file mode 100644 index 0000000000..778fb9fd16 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/WriteMsr64.c @@ -0,0 +1,32 @@ +/** @file + AsmWriteMsr64 function + + 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. + +**/ + +#if _MSC_EXTENSIONS + +UINT64 +EFIAPI +AsmWriteMsr64 ( + IN UINT32 Index, + IN UINT64 Value + ) +{ + _asm { + mov edx, dword ptr [Value + 4] + mov eax, dword ptr [Value + 0] + mov ecx, Index + wrmsr + } +} + +#endif -- 2.39.2