From f1baef624fb7119c54c3389a2cd99b108ee08f0e Mon Sep 17 00:00:00 2001 From: vanjeff Date: Mon, 2 Jul 2007 09:34:25 +0000 Subject: [PATCH] 1. Port X64, IPF and EBC arch for BaseLib 2. Port X64 arch codes for BaseMemoryLibRepStr and BaseMemoryLibSee2 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2955 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/BaseLib/Ebc/CpuBreakpoint.c | 164 ++++++ MdePkg/Library/BaseLib/Ebc/SetJumpLongJump.c | 78 +++ MdePkg/Library/BaseLib/Ebc/SwitchStack.c | 64 +++ MdePkg/Library/BaseLib/Ebc/Synchronization.c | 99 ++++ MdePkg/Library/BaseLib/Ia32/ARShiftU64.S | 5 - MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.S | 5 - MdePkg/Library/BaseLib/Ia32/CpuFlushTlb.S | 5 - MdePkg/Library/BaseLib/Ia32/CpuId.S | 5 - MdePkg/Library/BaseLib/Ia32/CpuIdEx.S | 139 +++-- MdePkg/Library/BaseLib/Ia32/CpuPause.S | 5 - MdePkg/Library/BaseLib/Ia32/CpuSleep.S | 5 - .../Library/BaseLib/Ia32/DisableInterrupts.S | 5 - MdePkg/Library/BaseLib/Ia32/DisablePaging32.S | 5 - MdePkg/Library/BaseLib/Ia32/DivU64x32.S | 87 ++- .../Library/BaseLib/Ia32/DivU64x32Remainder.S | 5 - .../Library/BaseLib/Ia32/DivU64x64Remainder.S | 5 - .../BaseLib/Ia32/EnableDisableInterrupts.S | 5 - .../Library/BaseLib/Ia32/EnableInterrupts.S | 5 - MdePkg/Library/BaseLib/Ia32/EnablePaging32.S | 5 - MdePkg/Library/BaseLib/Ia32/EnablePaging64.S | 5 - .../Library/BaseLib/Ia32/EnablePaging64.asm | 5 - MdePkg/Library/BaseLib/Ia32/FlushCacheLine.S | 5 - MdePkg/Library/BaseLib/Ia32/FxRestore.S | 5 - MdePkg/Library/BaseLib/Ia32/FxSave.S | 5 - .../Ia32/InterlockedCompareExchange32.S | 5 - .../Ia32/InterlockedCompareExchange64.S | 5 - .../BaseLib/Ia32/InterlockedDecrement.S | 5 - .../BaseLib/Ia32/InterlockedIncrement.S | 5 - MdePkg/Library/BaseLib/Ia32/Invd.S | 5 - MdePkg/Library/BaseLib/Ia32/LRotU64.S | 5 - MdePkg/Library/BaseLib/Ia32/LShiftU64.S | 87 ++- MdePkg/Library/BaseLib/Ia32/LongJump.S | 87 ++- MdePkg/Library/BaseLib/Ia32/ModU64x32.S | 5 - MdePkg/Library/BaseLib/Ia32/Monitor.S | 5 - MdePkg/Library/BaseLib/Ia32/MultU64x32.S | 87 ++- MdePkg/Library/BaseLib/Ia32/MultU64x64.S | 5 - MdePkg/Library/BaseLib/Ia32/Mwait.S | 5 - MdePkg/Library/BaseLib/Ia32/RRotU64.S | 5 - MdePkg/Library/BaseLib/Ia32/RShiftU64.S | 93 ++-- MdePkg/Library/BaseLib/Ia32/ReadCr0.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadCr2.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadCr3.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadCr4.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadCs.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadDr0.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadDr1.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadDr2.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadDr3.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadDr4.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadDr5.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadDr6.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadDr7.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadDs.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadEflags.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadEs.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadFs.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadGdtr.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadGs.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadIdtr.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadLdtr.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadMm0.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadMm1.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadMm2.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadMm3.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadMm4.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadMm5.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadMm6.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadMm7.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadMsr64.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadPmc.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadSs.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadTr.S | 5 - MdePkg/Library/BaseLib/Ia32/ReadTsc.S | 5 - MdePkg/Library/BaseLib/Ia32/SetJump.S | 5 - MdePkg/Library/BaseLib/Ia32/SwapBytes64.S | 81 ++- MdePkg/Library/BaseLib/Ia32/Thunk16.S | 5 - MdePkg/Library/BaseLib/Ia32/Wbinvd.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteCr0.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteCr2.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteCr3.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteCr4.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteDr0.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteDr1.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteDr2.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteDr3.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteDr4.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteDr5.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteDr6.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteDr7.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteGdtr.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteIdtr.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteLdtr.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteMm0.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteMm1.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteMm2.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteMm3.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteMm4.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteMm5.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteMm6.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteMm7.S | 5 - MdePkg/Library/BaseLib/Ia32/WriteMsr64.S | 5 - MdePkg/Library/BaseLib/Ipf/AccessDbr.s | 118 ++++ MdePkg/Library/BaseLib/Ipf/AccessEicr.s | 512 ++++++++++++++++++ MdePkg/Library/BaseLib/Ipf/AccessGcr.s | 264 +++++++++ MdePkg/Library/BaseLib/Ipf/AccessGp.s | 86 +++ MdePkg/Library/BaseLib/Ipf/AccessKr.s | 400 ++++++++++++++ MdePkg/Library/BaseLib/Ipf/AccessPmr.s | 124 +++++ MdePkg/Library/BaseLib/Ipf/AccessPsr.s | 110 ++++ MdePkg/Library/BaseLib/Ipf/AsmPalCall.s | 158 ++++++ MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c | 123 +++++ MdePkg/Library/BaseLib/Ipf/CpuFlushTlb.s | 58 ++ MdePkg/Library/BaseLib/Ipf/CpuPause.s | 25 + MdePkg/Library/BaseLib/Ipf/ExecFc.s | 66 +++ MdePkg/Library/BaseLib/Ipf/FlushCacheRange.s | 96 ++++ .../Library/BaseLib/Ipf/GetInterruptState.s | 27 + .../Ipf/InterlockedCompareExchange32.s | 29 + .../Ipf/InterlockedCompareExchange64.s | 28 + .../Library/BaseLib/Ipf/InternalSwitchStack.c | 68 +++ MdePkg/Library/BaseLib/Ipf/PalCallStatic.s | 48 ++ MdePkg/Library/BaseLib/Ipf/ReadCpuid.s | 40 ++ MdePkg/Library/BaseLib/Ipf/SwitchStack.s | 50 ++ MdePkg/Library/BaseLib/Ipf/Synchronization.c | 79 +++ MdePkg/Library/BaseLib/Ipf/Unaligned.c | 248 +++++++++ MdePkg/Library/BaseLib/Ipf/asm.h | 27 + MdePkg/Library/BaseLib/Ipf/ia_64gen.h | 205 +++++++ MdePkg/Library/BaseLib/Ipf/longjmp.s | 121 +++++ MdePkg/Library/BaseLib/Ipf/setjmp.s | 108 ++++ MdePkg/Library/BaseLib/X64/CpuBreakpoint.S | 25 + MdePkg/Library/BaseLib/X64/CpuBreakpoint.asm | 37 ++ MdePkg/Library/BaseLib/X64/CpuBreakpoint.c | 31 ++ MdePkg/Library/BaseLib/X64/CpuFlushTlb.S | 35 ++ MdePkg/Library/BaseLib/X64/CpuFlushTlb.asm | 38 ++ MdePkg/Library/BaseLib/X64/CpuId.S | 60 ++ MdePkg/Library/BaseLib/X64/CpuId.asm | 62 +++ MdePkg/Library/BaseLib/X64/CpuIdEx.S | 62 +++ MdePkg/Library/BaseLib/X64/CpuIdEx.asm | 64 +++ MdePkg/Library/BaseLib/X64/CpuPause.S | 34 ++ MdePkg/Library/BaseLib/X64/CpuPause.asm | 37 ++ MdePkg/Library/BaseLib/X64/CpuSleep.S | 34 ++ MdePkg/Library/BaseLib/X64/CpuSleep.asm | 37 ++ .../Library/BaseLib/X64/DisableInterrupts.S | 35 ++ .../Library/BaseLib/X64/DisableInterrupts.asm | 38 ++ MdePkg/Library/BaseLib/X64/DisablePaging64.S | 66 +++ .../Library/BaseLib/X64/DisablePaging64.asm | 65 +++ .../BaseLib/X64/EnableDisableInterrupts.S | 37 ++ .../BaseLib/X64/EnableDisableInterrupts.asm | 39 ++ MdePkg/Library/BaseLib/X64/EnableInterrupts.S | 35 ++ .../Library/BaseLib/X64/EnableInterrupts.asm | 38 ++ MdePkg/Library/BaseLib/X64/EnablePaging64.S | 61 +++ MdePkg/Library/BaseLib/X64/EnablePaging64.asm | 64 +++ MdePkg/Library/BaseLib/X64/FlushCacheLine.S | 36 ++ MdePkg/Library/BaseLib/X64/FlushCacheLine.asm | 39 ++ MdePkg/Library/BaseLib/X64/FxRestore.S | 35 ++ MdePkg/Library/BaseLib/X64/FxRestore.asm | 38 ++ MdePkg/Library/BaseLib/X64/FxSave.S | 35 ++ MdePkg/Library/BaseLib/X64/FxSave.asm | 38 ++ .../X64/InterlockedCompareExchange32.S | 37 ++ .../X64/InterlockedCompareExchange32.asm | 41 ++ .../X64/InterlockedCompareExchange32.c | 36 ++ .../X64/InterlockedCompareExchange64.S | 39 ++ .../X64/InterlockedCompareExchange64.asm | 41 ++ .../X64/InterlockedCompareExchange64.c | 36 ++ .../BaseLib/X64/InterlockedDecrement.S | 36 ++ .../BaseLib/X64/InterlockedDecrement.asm | 39 ++ .../BaseLib/X64/InterlockedDecrement.c | 32 ++ .../BaseLib/X64/InterlockedIncrement.S | 36 ++ .../BaseLib/X64/InterlockedIncrement.asm | 39 ++ .../BaseLib/X64/InterlockedIncrement.c | 32 ++ MdePkg/Library/BaseLib/X64/Invd.S | 35 ++ MdePkg/Library/BaseLib/X64/Invd.asm | 38 ++ MdePkg/Library/BaseLib/X64/LongJump.S | 42 ++ MdePkg/Library/BaseLib/X64/LongJump.asm | 46 ++ MdePkg/Library/BaseLib/X64/Monitor.S | 41 ++ MdePkg/Library/BaseLib/X64/Monitor.asm | 43 ++ MdePkg/Library/BaseLib/X64/Mwait.S | 39 ++ MdePkg/Library/BaseLib/X64/Mwait.asm | 41 ++ MdePkg/Library/BaseLib/X64/Non-existing.c | 110 ++++ MdePkg/Library/BaseLib/X64/ReadCr0.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadCr0.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadCr2.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadCr2.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadCr3.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadCr3.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadCr4.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadCr4.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadCs.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadCs.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadDr0.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadDr0.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadDr1.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadDr1.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadDr2.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadDr2.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadDr3.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadDr3.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadDr4.S | 37 ++ MdePkg/Library/BaseLib/X64/ReadDr4.asm | 42 ++ MdePkg/Library/BaseLib/X64/ReadDr5.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadDr5.asm | 42 ++ MdePkg/Library/BaseLib/X64/ReadDr6.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadDr6.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadDr7.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadDr7.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadDs.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadDs.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadEflags.S | 37 ++ MdePkg/Library/BaseLib/X64/ReadEflags.asm | 39 ++ MdePkg/Library/BaseLib/X64/ReadEs.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadEs.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadFs.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadFs.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadGdtr.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadGdtr.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadGs.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadGs.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadIdtr.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadIdtr.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadLdtr.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadLdtr.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadMm0.S | 37 ++ MdePkg/Library/BaseLib/X64/ReadMm0.asm | 41 ++ MdePkg/Library/BaseLib/X64/ReadMm1.S | 37 ++ MdePkg/Library/BaseLib/X64/ReadMm1.asm | 41 ++ MdePkg/Library/BaseLib/X64/ReadMm2.S | 37 ++ MdePkg/Library/BaseLib/X64/ReadMm2.asm | 41 ++ MdePkg/Library/BaseLib/X64/ReadMm3.S | 37 ++ MdePkg/Library/BaseLib/X64/ReadMm3.asm | 41 ++ MdePkg/Library/BaseLib/X64/ReadMm4.S | 37 ++ MdePkg/Library/BaseLib/X64/ReadMm4.asm | 41 ++ MdePkg/Library/BaseLib/X64/ReadMm5.S | 37 ++ MdePkg/Library/BaseLib/X64/ReadMm5.asm | 41 ++ MdePkg/Library/BaseLib/X64/ReadMm6.S | 37 ++ MdePkg/Library/BaseLib/X64/ReadMm6.asm | 41 ++ MdePkg/Library/BaseLib/X64/ReadMm7.S | 37 ++ MdePkg/Library/BaseLib/X64/ReadMm7.asm | 41 ++ MdePkg/Library/BaseLib/X64/ReadMsr64.S | 38 ++ MdePkg/Library/BaseLib/X64/ReadMsr64.asm | 40 ++ MdePkg/Library/BaseLib/X64/ReadMsr64.c | 31 ++ MdePkg/Library/BaseLib/X64/ReadPmc.S | 38 ++ MdePkg/Library/BaseLib/X64/ReadPmc.asm | 40 ++ MdePkg/Library/BaseLib/X64/ReadSs.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadSs.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadTr.S | 36 ++ MdePkg/Library/BaseLib/X64/ReadTr.asm | 38 ++ MdePkg/Library/BaseLib/X64/ReadTsc.S | 38 ++ MdePkg/Library/BaseLib/X64/ReadTsc.asm | 40 ++ MdePkg/Library/BaseLib/X64/SetJump.S | 42 ++ MdePkg/Library/BaseLib/X64/SetJump.asm | 54 ++ MdePkg/Library/BaseLib/X64/SwitchStack.S | 44 ++ MdePkg/Library/BaseLib/X64/SwitchStack.asm | 47 ++ MdePkg/Library/BaseLib/X64/Thunk16.S | 0 MdePkg/Library/BaseLib/X64/Thunk16.asm | 289 ++++++++++ MdePkg/Library/BaseLib/X64/Wbinvd.S | 36 ++ MdePkg/Library/BaseLib/X64/Wbinvd.asm | 38 ++ MdePkg/Library/BaseLib/X64/WriteCr0.S | 36 ++ MdePkg/Library/BaseLib/X64/WriteCr0.asm | 39 ++ MdePkg/Library/BaseLib/X64/WriteCr2.S | 36 ++ MdePkg/Library/BaseLib/X64/WriteCr2.asm | 39 ++ MdePkg/Library/BaseLib/X64/WriteCr3.S | 36 ++ MdePkg/Library/BaseLib/X64/WriteCr3.asm | 39 ++ MdePkg/Library/BaseLib/X64/WriteCr4.S | 36 ++ MdePkg/Library/BaseLib/X64/WriteCr4.asm | 39 ++ MdePkg/Library/BaseLib/X64/WriteDr0.S | 37 ++ MdePkg/Library/BaseLib/X64/WriteDr0.asm | 39 ++ MdePkg/Library/BaseLib/X64/WriteDr1.S | 37 ++ MdePkg/Library/BaseLib/X64/WriteDr1.asm | 39 ++ MdePkg/Library/BaseLib/X64/WriteDr2.S | 37 ++ MdePkg/Library/BaseLib/X64/WriteDr2.asm | 39 ++ MdePkg/Library/BaseLib/X64/WriteDr3.S | 37 ++ MdePkg/Library/BaseLib/X64/WriteDr3.asm | 39 ++ MdePkg/Library/BaseLib/X64/WriteDr4.S | 36 ++ MdePkg/Library/BaseLib/X64/WriteDr4.asm | 43 ++ MdePkg/Library/BaseLib/X64/WriteDr5.S | 36 ++ MdePkg/Library/BaseLib/X64/WriteDr5.asm | 43 ++ MdePkg/Library/BaseLib/X64/WriteDr6.S | 36 ++ MdePkg/Library/BaseLib/X64/WriteDr6.asm | 39 ++ MdePkg/Library/BaseLib/X64/WriteDr7.S | 36 ++ MdePkg/Library/BaseLib/X64/WriteDr7.asm | 39 ++ MdePkg/Library/BaseLib/X64/WriteGdtr.S | 35 ++ MdePkg/Library/BaseLib/X64/WriteGdtr.asm | 38 ++ MdePkg/Library/BaseLib/X64/WriteIdtr.S | 36 ++ MdePkg/Library/BaseLib/X64/WriteIdtr.asm | 38 ++ MdePkg/Library/BaseLib/X64/WriteLdtr.S | 36 ++ MdePkg/Library/BaseLib/X64/WriteLdtr.asm | 38 ++ MdePkg/Library/BaseLib/X64/WriteMm0.S | 35 ++ MdePkg/Library/BaseLib/X64/WriteMm0.asm | 41 ++ MdePkg/Library/BaseLib/X64/WriteMm1.S | 35 ++ MdePkg/Library/BaseLib/X64/WriteMm1.asm | 41 ++ MdePkg/Library/BaseLib/X64/WriteMm2.S | 35 ++ MdePkg/Library/BaseLib/X64/WriteMm2.asm | 41 ++ MdePkg/Library/BaseLib/X64/WriteMm3.S | 35 ++ MdePkg/Library/BaseLib/X64/WriteMm3.asm | 41 ++ MdePkg/Library/BaseLib/X64/WriteMm4.S | 35 ++ MdePkg/Library/BaseLib/X64/WriteMm4.asm | 41 ++ MdePkg/Library/BaseLib/X64/WriteMm5.S | 35 ++ MdePkg/Library/BaseLib/X64/WriteMm5.asm | 41 ++ MdePkg/Library/BaseLib/X64/WriteMm6.S | 35 ++ MdePkg/Library/BaseLib/X64/WriteMm6.asm | 41 ++ MdePkg/Library/BaseLib/X64/WriteMm7.S | 35 ++ MdePkg/Library/BaseLib/X64/WriteMm7.asm | 41 ++ MdePkg/Library/BaseLib/X64/WriteMsr64.S | 40 ++ MdePkg/Library/BaseLib/X64/WriteMsr64.asm | 41 ++ MdePkg/Library/BaseLib/X64/WriteMsr64.c | 32 ++ .../BaseMemoryLibRepStr/Ia32/CompareMem.S | 111 ++-- .../BaseMemoryLibRepStr/Ia32/CompareMem.asm | 5 - .../BaseMemoryLibRepStr/Ia32/CopyMem.S | 135 +++-- .../BaseMemoryLibRepStr/Ia32/CopyMem.asm | 5 - .../BaseMemoryLibRepStr/Ia32/ScanMem16.S | 105 ++-- .../BaseMemoryLibRepStr/Ia32/ScanMem16.asm | 5 - .../BaseMemoryLibRepStr/Ia32/ScanMem32.S | 105 ++-- .../BaseMemoryLibRepStr/Ia32/ScanMem32.asm | 5 - .../BaseMemoryLibRepStr/Ia32/ScanMem64.S | 123 ++--- .../BaseMemoryLibRepStr/Ia32/ScanMem64.asm | 5 - .../BaseMemoryLibRepStr/Ia32/ScanMem8.S | 105 ++-- .../BaseMemoryLibRepStr/Ia32/ScanMem8.asm | 5 - .../Library/BaseMemoryLibRepStr/Ia32/SetMem.S | 97 ++-- .../BaseMemoryLibRepStr/Ia32/SetMem.asm | 5 - .../BaseMemoryLibRepStr/Ia32/SetMem16.S | 91 ++-- .../BaseMemoryLibRepStr/Ia32/SetMem16.asm | 5 - .../BaseMemoryLibRepStr/Ia32/SetMem32.S | 91 ++-- .../BaseMemoryLibRepStr/Ia32/SetMem32.asm | 5 - .../BaseMemoryLibRepStr/Ia32/SetMem64.S | 97 ++-- .../BaseMemoryLibRepStr/Ia32/SetMem64.asm | 5 - .../BaseMemoryLibRepStr/Ia32/ZeroMem.S | 103 ++-- .../BaseMemoryLibRepStr/Ia32/ZeroMem.asm | 5 - .../BaseMemoryLibRepStr/x64/CompareMem.asm | 52 ++ .../BaseMemoryLibRepStr/x64/CopyMem.asm | 61 +++ .../BaseMemoryLibRepStr/x64/ScanMem16.asm | 51 ++ .../BaseMemoryLibRepStr/x64/ScanMem32.asm | 51 ++ .../BaseMemoryLibRepStr/x64/ScanMem64.asm | 51 ++ .../BaseMemoryLibRepStr/x64/ScanMem8.asm | 51 ++ .../BaseMemoryLibRepStr/x64/SetMem.asm | 44 ++ .../BaseMemoryLibRepStr/x64/SetMem16.asm | 44 ++ .../BaseMemoryLibRepStr/x64/SetMem32.asm | 44 ++ .../BaseMemoryLibRepStr/x64/SetMem64.asm | 43 ++ .../BaseMemoryLibRepStr/x64/ZeroMem.asm | 47 ++ .../BaseMemoryLibSse2/Ia32/CompareMem.S | 111 ++-- .../BaseMemoryLibSse2/Ia32/CompareMem.asm | 5 - .../Library/BaseMemoryLibSse2/Ia32/CopyMem.S | 175 +++--- .../BaseMemoryLibSse2/Ia32/CopyMem.asm | 5 - .../BaseMemoryLibSse2/Ia32/ScanMem16.S | 105 ++-- .../BaseMemoryLibSse2/Ia32/ScanMem16.asm | 5 - .../BaseMemoryLibSse2/Ia32/ScanMem32.S | 105 ++-- .../BaseMemoryLibSse2/Ia32/ScanMem32.asm | 5 - .../BaseMemoryLibSse2/Ia32/ScanMem64.S | 123 ++--- .../BaseMemoryLibSse2/Ia32/ScanMem64.asm | 5 - .../Library/BaseMemoryLibSse2/Ia32/ScanMem8.S | 105 ++-- .../BaseMemoryLibSse2/Ia32/ScanMem8.asm | 5 - .../Library/BaseMemoryLibSse2/Ia32/SetMem.S | 157 +++--- .../Library/BaseMemoryLibSse2/Ia32/SetMem.asm | 5 - .../Library/BaseMemoryLibSse2/Ia32/SetMem16.S | 143 +++-- .../BaseMemoryLibSse2/Ia32/SetMem16.asm | 5 - .../Library/BaseMemoryLibSse2/Ia32/SetMem32.S | 141 +++-- .../BaseMemoryLibSse2/Ia32/SetMem32.asm | 5 - .../Library/BaseMemoryLibSse2/Ia32/SetMem64.S | 5 - .../BaseMemoryLibSse2/Ia32/SetMem64.asm | 5 - .../Library/BaseMemoryLibSse2/Ia32/ZeroMem.S | 135 +++-- .../BaseMemoryLibSse2/Ia32/ZeroMem.asm | 5 - .../BaseMemoryLibSse2/x64/CompareMem.asm | 52 ++ .../Library/BaseMemoryLibSse2/x64/CopyMem.asm | 79 +++ .../BaseMemoryLibSse2/x64/ScanMem16.asm | 51 ++ .../BaseMemoryLibSse2/x64/ScanMem32.asm | 51 ++ .../BaseMemoryLibSse2/x64/ScanMem64.asm | 51 ++ .../BaseMemoryLibSse2/x64/ScanMem8.asm | 51 ++ .../Library/BaseMemoryLibSse2/x64/SetMem.asm | 69 +++ .../BaseMemoryLibSse2/x64/SetMem16.asm | 67 +++ .../BaseMemoryLibSse2/x64/SetMem32.asm | 66 +++ .../BaseMemoryLibSse2/x64/SetMem64.asm | 59 ++ .../Library/BaseMemoryLibSse2/x64/ZeroMem.asm | 63 +++ .../Library/UefiRuntimeLib/UefiRuntimeLib.inf | 8 +- MdePkg/MdePkg.dsc | 11 +- 371 files changed, 13464 insertions(+), 2205 deletions(-) create mode 100644 MdePkg/Library/BaseLib/Ebc/CpuBreakpoint.c create mode 100644 MdePkg/Library/BaseLib/Ebc/SetJumpLongJump.c create mode 100644 MdePkg/Library/BaseLib/Ebc/SwitchStack.c create mode 100644 MdePkg/Library/BaseLib/Ebc/Synchronization.c create mode 100644 MdePkg/Library/BaseLib/Ipf/AccessDbr.s create mode 100644 MdePkg/Library/BaseLib/Ipf/AccessEicr.s create mode 100644 MdePkg/Library/BaseLib/Ipf/AccessGcr.s create mode 100644 MdePkg/Library/BaseLib/Ipf/AccessGp.s create mode 100644 MdePkg/Library/BaseLib/Ipf/AccessKr.s create mode 100644 MdePkg/Library/BaseLib/Ipf/AccessPmr.s create mode 100644 MdePkg/Library/BaseLib/Ipf/AccessPsr.s create mode 100644 MdePkg/Library/BaseLib/Ipf/AsmPalCall.s create mode 100644 MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c create mode 100644 MdePkg/Library/BaseLib/Ipf/CpuFlushTlb.s create mode 100644 MdePkg/Library/BaseLib/Ipf/CpuPause.s create mode 100644 MdePkg/Library/BaseLib/Ipf/ExecFc.s create mode 100644 MdePkg/Library/BaseLib/Ipf/FlushCacheRange.s create mode 100644 MdePkg/Library/BaseLib/Ipf/GetInterruptState.s create mode 100644 MdePkg/Library/BaseLib/Ipf/InterlockedCompareExchange32.s create mode 100644 MdePkg/Library/BaseLib/Ipf/InterlockedCompareExchange64.s create mode 100644 MdePkg/Library/BaseLib/Ipf/InternalSwitchStack.c create mode 100644 MdePkg/Library/BaseLib/Ipf/PalCallStatic.s create mode 100644 MdePkg/Library/BaseLib/Ipf/ReadCpuid.s create mode 100644 MdePkg/Library/BaseLib/Ipf/SwitchStack.s create mode 100644 MdePkg/Library/BaseLib/Ipf/Synchronization.c create mode 100644 MdePkg/Library/BaseLib/Ipf/Unaligned.c create mode 100644 MdePkg/Library/BaseLib/Ipf/asm.h create mode 100644 MdePkg/Library/BaseLib/Ipf/ia_64gen.h create mode 100644 MdePkg/Library/BaseLib/Ipf/longjmp.s create mode 100644 MdePkg/Library/BaseLib/Ipf/setjmp.s create mode 100644 MdePkg/Library/BaseLib/X64/CpuBreakpoint.S create mode 100644 MdePkg/Library/BaseLib/X64/CpuBreakpoint.asm create mode 100644 MdePkg/Library/BaseLib/X64/CpuBreakpoint.c create mode 100644 MdePkg/Library/BaseLib/X64/CpuFlushTlb.S create mode 100644 MdePkg/Library/BaseLib/X64/CpuFlushTlb.asm create mode 100644 MdePkg/Library/BaseLib/X64/CpuId.S create mode 100644 MdePkg/Library/BaseLib/X64/CpuId.asm create mode 100644 MdePkg/Library/BaseLib/X64/CpuIdEx.S create mode 100644 MdePkg/Library/BaseLib/X64/CpuIdEx.asm create mode 100644 MdePkg/Library/BaseLib/X64/CpuPause.S create mode 100644 MdePkg/Library/BaseLib/X64/CpuPause.asm create mode 100644 MdePkg/Library/BaseLib/X64/CpuSleep.S create mode 100644 MdePkg/Library/BaseLib/X64/CpuSleep.asm create mode 100644 MdePkg/Library/BaseLib/X64/DisableInterrupts.S create mode 100644 MdePkg/Library/BaseLib/X64/DisableInterrupts.asm create mode 100644 MdePkg/Library/BaseLib/X64/DisablePaging64.S create mode 100644 MdePkg/Library/BaseLib/X64/DisablePaging64.asm create mode 100644 MdePkg/Library/BaseLib/X64/EnableDisableInterrupts.S create mode 100644 MdePkg/Library/BaseLib/X64/EnableDisableInterrupts.asm create mode 100644 MdePkg/Library/BaseLib/X64/EnableInterrupts.S create mode 100644 MdePkg/Library/BaseLib/X64/EnableInterrupts.asm create mode 100644 MdePkg/Library/BaseLib/X64/EnablePaging64.S create mode 100644 MdePkg/Library/BaseLib/X64/EnablePaging64.asm create mode 100644 MdePkg/Library/BaseLib/X64/FlushCacheLine.S create mode 100644 MdePkg/Library/BaseLib/X64/FlushCacheLine.asm create mode 100644 MdePkg/Library/BaseLib/X64/FxRestore.S create mode 100644 MdePkg/Library/BaseLib/X64/FxRestore.asm create mode 100644 MdePkg/Library/BaseLib/X64/FxSave.S create mode 100644 MdePkg/Library/BaseLib/X64/FxSave.asm create mode 100644 MdePkg/Library/BaseLib/X64/InterlockedCompareExchange32.S create mode 100644 MdePkg/Library/BaseLib/X64/InterlockedCompareExchange32.asm create mode 100644 MdePkg/Library/BaseLib/X64/InterlockedCompareExchange32.c create mode 100644 MdePkg/Library/BaseLib/X64/InterlockedCompareExchange64.S create mode 100644 MdePkg/Library/BaseLib/X64/InterlockedCompareExchange64.asm create mode 100644 MdePkg/Library/BaseLib/X64/InterlockedCompareExchange64.c create mode 100644 MdePkg/Library/BaseLib/X64/InterlockedDecrement.S create mode 100644 MdePkg/Library/BaseLib/X64/InterlockedDecrement.asm create mode 100644 MdePkg/Library/BaseLib/X64/InterlockedDecrement.c create mode 100644 MdePkg/Library/BaseLib/X64/InterlockedIncrement.S create mode 100644 MdePkg/Library/BaseLib/X64/InterlockedIncrement.asm create mode 100644 MdePkg/Library/BaseLib/X64/InterlockedIncrement.c create mode 100644 MdePkg/Library/BaseLib/X64/Invd.S create mode 100644 MdePkg/Library/BaseLib/X64/Invd.asm create mode 100644 MdePkg/Library/BaseLib/X64/LongJump.S create mode 100644 MdePkg/Library/BaseLib/X64/LongJump.asm create mode 100644 MdePkg/Library/BaseLib/X64/Monitor.S create mode 100644 MdePkg/Library/BaseLib/X64/Monitor.asm create mode 100644 MdePkg/Library/BaseLib/X64/Mwait.S create mode 100644 MdePkg/Library/BaseLib/X64/Mwait.asm create mode 100644 MdePkg/Library/BaseLib/X64/Non-existing.c create mode 100644 MdePkg/Library/BaseLib/X64/ReadCr0.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadCr0.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadCr2.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadCr2.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadCr3.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadCr3.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadCr4.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadCr4.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadCs.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadCs.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr0.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr0.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr1.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr1.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr2.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr2.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr3.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr3.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr4.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr4.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr5.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr5.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr6.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr6.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr7.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadDr7.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadDs.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadDs.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadEflags.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadEflags.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadEs.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadEs.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadFs.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadFs.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadGdtr.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadGdtr.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadGs.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadGs.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadIdtr.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadIdtr.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadLdtr.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadLdtr.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm0.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm0.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm1.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm1.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm2.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm2.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm3.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm3.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm4.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm4.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm5.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm5.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm6.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm6.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm7.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadMm7.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadMsr64.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadMsr64.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadMsr64.c create mode 100644 MdePkg/Library/BaseLib/X64/ReadPmc.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadPmc.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadSs.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadSs.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadTr.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadTr.asm create mode 100644 MdePkg/Library/BaseLib/X64/ReadTsc.S create mode 100644 MdePkg/Library/BaseLib/X64/ReadTsc.asm create mode 100644 MdePkg/Library/BaseLib/X64/SetJump.S create mode 100644 MdePkg/Library/BaseLib/X64/SetJump.asm create mode 100644 MdePkg/Library/BaseLib/X64/SwitchStack.S create mode 100644 MdePkg/Library/BaseLib/X64/SwitchStack.asm create mode 100644 MdePkg/Library/BaseLib/X64/Thunk16.S create mode 100644 MdePkg/Library/BaseLib/X64/Thunk16.asm create mode 100644 MdePkg/Library/BaseLib/X64/Wbinvd.S create mode 100644 MdePkg/Library/BaseLib/X64/Wbinvd.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteCr0.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteCr0.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteCr2.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteCr2.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteCr3.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteCr3.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteCr4.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteCr4.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr0.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr0.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr1.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr1.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr2.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr2.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr3.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr3.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr4.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr4.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr5.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr5.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr6.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr6.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr7.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteDr7.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteGdtr.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteGdtr.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteIdtr.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteIdtr.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteLdtr.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteLdtr.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm0.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm0.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm1.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm1.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm2.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm2.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm3.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm3.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm4.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm4.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm5.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm5.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm6.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm6.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm7.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteMm7.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteMsr64.S create mode 100644 MdePkg/Library/BaseLib/X64/WriteMsr64.asm create mode 100644 MdePkg/Library/BaseLib/X64/WriteMsr64.c create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/x64/CompareMem.asm create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/x64/CopyMem.asm create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem16.asm create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem32.asm create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem64.asm create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem8.asm create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem.asm create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem16.asm create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem32.asm create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem64.asm create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/x64/ZeroMem.asm create mode 100644 MdePkg/Library/BaseMemoryLibSse2/x64/CompareMem.asm create mode 100644 MdePkg/Library/BaseMemoryLibSse2/x64/CopyMem.asm create mode 100644 MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem16.asm create mode 100644 MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem32.asm create mode 100644 MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem64.asm create mode 100644 MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem8.asm create mode 100644 MdePkg/Library/BaseMemoryLibSse2/x64/SetMem.asm create mode 100644 MdePkg/Library/BaseMemoryLibSse2/x64/SetMem16.asm create mode 100644 MdePkg/Library/BaseMemoryLibSse2/x64/SetMem32.asm create mode 100644 MdePkg/Library/BaseMemoryLibSse2/x64/SetMem64.asm create mode 100644 MdePkg/Library/BaseMemoryLibSse2/x64/ZeroMem.asm diff --git a/MdePkg/Library/BaseLib/Ebc/CpuBreakpoint.c b/MdePkg/Library/BaseLib/Ebc/CpuBreakpoint.c new file mode 100644 index 0000000000..352e1c7c1f --- /dev/null +++ b/MdePkg/Library/BaseLib/Ebc/CpuBreakpoint.c @@ -0,0 +1,164 @@ +/** @file + Base Library CPU Functions for EBC + + 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. + +**/ + +extern +UINT64 +_break ( + CHAR8 BreakCode + ); + +/** + Generates a breakpoint on the CPU. + + Generates a breakpoint on the CPU. The breakpoint must be implemented such + that code can resume normal execution after the breakpoint. + +**/ +VOID +EFIAPI +CpuBreakpoint ( + VOID + ) +{ + _break (3); +} + +/** + Used to serialize load and store operations. + + All loads and stores that proceed calls to this function are guaranteed to be + globally visible when this function returns. + +**/ +VOID +EFIAPI +MemoryFence ( + VOID + ) +{ +} + +/** + Disables CPU interrupts. + + Disables CPU interrupts. + +**/ +VOID +EFIAPI +DisableInterrupts ( + VOID + ) +{ + ASSERT (FALSE); +} + +/** + Enables CPU interrupts. + + Enables CPU interrupts. + +**/ +VOID +EFIAPI +EnableInterrupts ( + VOID + ) +{ + ASSERT (FALSE); +} + +/** + Retrieves the current CPU interrupt state. + + Retrieves the current CPU interrupt state. Returns TRUE is interrupts are + currently enabled. Otherwise returns FALSE. + + @retval TRUE CPU interrupts are enabled. + @retval FALSE CPU interrupts are disabled. + +**/ +BOOLEAN +EFIAPI +GetInterruptState ( + VOID + ) +{ + ASSERT (FALSE); + return FALSE; +} + +/** + Enables CPU interrupts for the smallest window required to capture any + pending interrupts. + + Enables CPU interrupts for the smallest window required to capture any + pending interrupts. + +**/ +VOID +EFIAPI +EnableDisableInterrupts ( + VOID + ) +{ + EnableInterrupts (); + DisableInterrupts (); +} + +/** + Requests CPU to pause for a short period of time. + + Requests CPU to pause for a short period of time. Typically used in MP + systems to prevent memory starvation while waiting for a spin lock. + +**/ +VOID +EFIAPI +CpuPause ( + VOID + ) +{ +} + +/** + Flushes all the Translation Lookaside Buffers(TLB) entries in a CPU. + + Flushes all the Translation Lookaside Buffers(TLB) entries in a CPU. + +**/ +VOID +EFIAPI +CpuFlushTlb ( + VOID + ) +{ + ASSERT (FALSE); +} + +/** + Places the CPU in a sleep state until an interrupt is received. + + Places the CPU in a sleep state until an interrupt is received. If interrupts + are disabled prior to calling this function, then the CPU will be placed in a + sleep state indefinitely. + +**/ +VOID +EFIAPI +CpuSleep ( + VOID + ) +{ +} diff --git a/MdePkg/Library/BaseLib/Ebc/SetJumpLongJump.c b/MdePkg/Library/BaseLib/Ebc/SetJumpLongJump.c new file mode 100644 index 0000000000..b485d3e495 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ebc/SetJumpLongJump.c @@ -0,0 +1,78 @@ +/** @file + Switch Stack 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. + + Module Name: SetJumpLongJump.c + +**/ + +/** + Worker function that checks ASSERT condition for JumpBuffer + + Checks ASSERT condition for JumpBuffer. + + If JumpBuffer is NULL, then ASSERT(). + For IPF CPUs, if JumpBuffer is not aligned on a 16-byte boundary, then ASSERT(). + + @param JumpBuffer A pointer to CPU context buffer. + +**/ +VOID +InternalAssertJumpBuffer ( + IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer + ); + +/** + Saves the current CPU context that can be restored with a call to LongJump() and returns 0. + + Saves the current CPU context in the buffer specified by JumpBuffer and returns 0. The initial + call to SetJump() must always return 0. Subsequent calls to LongJump() cause a non-zero + value to be returned by SetJump(). + + If JumpBuffer is NULL, then ASSERT(). + For IPF CPUs, if JumpBuffer is not aligned on a 16-byte boundary, then ASSERT(). + + @param JumpBuffer A pointer to CPU context buffer. + +**/ +UINTN +EFIAPI +SetJump ( + IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer + ) +{ + InternalAssertJumpBuffer (JumpBuffer); + return 0; +} + +/** + Restores the CPU context that was saved with SetJump(). + + Restores the CPU context from the buffer specified by JumpBuffer. + This function never returns to the caller. + Instead is resumes execution based on the state of JumpBuffer. + + @param JumpBuffer A pointer to CPU context buffer. + @param Value The value to return when the SetJump() context is restored. + +**/ +VOID +EFIAPI +InternalLongJump ( + IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer, + IN UINTN Value + ) +{ + // + // This function cannot work on EBC + // + ASSERT (FALSE); +} diff --git a/MdePkg/Library/BaseLib/Ebc/SwitchStack.c b/MdePkg/Library/BaseLib/Ebc/SwitchStack.c new file mode 100644 index 0000000000..d2861c4f85 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ebc/SwitchStack.c @@ -0,0 +1,64 @@ +/** @file + Switch Stack functions. + + Copyright (c) 2006 - 2007, Intel Corporation
+ All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + Module Name: SwitchStack.c + +**/ + +/** + Transfers control to a function starting with a new stack. + + Transfers control to the function specified by EntryPoint using the + new stack specified by NewStack and passing in the parameters specified + by Context1 and Context2. Context1 and Context2 are optional and may + be NULL. The function EntryPoint must never return. + Marker will be ignored on IA-32, x64, and EBC. + IPF CPUs expect one additional parameter of type VOID * that specifies + the new backing store pointer. + + If EntryPoint is NULL, then ASSERT(). + If NewStack is NULL, then ASSERT(). + + @param EntryPoint A pointer to function to call with the new stack. + @param Context1 A pointer to the context to pass into the EntryPoint + function. + @param Context2 A pointer to the context to pass into the EntryPoint + function. + @param NewStack A pointer to the new stack to use for the EntryPoint + function. + @param Marker VA_LIST marker for the variable argument list. + +**/ +VOID +EFIAPI +InternalSwitchStack ( + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1, OPTIONAL + IN VOID *Context2, OPTIONAL + IN VOID *NewStack, + IN VA_LIST Marker + ) + +{ + // + // This version of this function does not actually change the stack pointer + // This is to support compilation of CPU types that do not support assemblers + // such as EBC + // + + // + // Stack should be aligned with CPU_STACK_ALIGNMENT + // + ASSERT (((UINTN)NewStack & (CPU_STACK_ALIGNMENT - 1)) == 0); + + EntryPoint (Context1, Context2); +} diff --git a/MdePkg/Library/BaseLib/Ebc/Synchronization.c b/MdePkg/Library/BaseLib/Ebc/Synchronization.c new file mode 100644 index 0000000000..5d5bc2ff11 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ebc/Synchronization.c @@ -0,0 +1,99 @@ +/** @file + Implementation of synchronization functions on EBC. + + Copyright (c) 2006, Intel Corporation
+ All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + Module Name: Synchronization.c + +**/ + +UINT32 +EFIAPI +InternalSyncCompareExchange32 ( + IN volatile UINT32 *Value, + IN UINT32 CompareValue, + IN UINT32 ExchangeValue + ) +{ + return *Value != CompareValue ? *Value : + ((*Value = ExchangeValue), CompareValue); +} + +/** + Performs an atomic compare exchange operation on a 64-bit unsigned integer. + + Performs an atomic compare exchange operation on the 64-bit unsigned integer specified + by Value. If Value is equal to CompareValue, then Value is set to ExchangeValue and + CompareValue is returned. If Value is not equal to CompareValue, then Value is returned. + The compare exchange operation must be performed using MP safe mechanisms. + + @param Value A pointer to the 64-bit value for the compare exchange + operation. + @param CompareValue 64-bit value used in compare operation. + @param ExchangeValue 64-bit value used in exchange operation. + + @return The original *Value before exchange. + +**/ +UINT64 +EFIAPI +InternalSyncCompareExchange64 ( + IN volatile UINT64 *Value, + IN UINT64 CompareValue, + IN UINT64 ExchangeValue + ) +{ + return *Value != CompareValue ? *Value : + ((*Value = ExchangeValue), CompareValue); +} + +/** + Performs an atomic increment of an 32-bit unsigned integer. + + Performs an atomic increment of the 32-bit unsigned integer specified by + Value and returns the incremented value. The increment operation must be + performed using MP safe mechanisms. The state of the return value is not + guaranteed to be MP safe. + + @param Value A pointer to the 32-bit value to increment. + + @return The incremented value. + +**/ +UINT32 +EFIAPI +InternalSyncIncrement ( + IN volatile UINT32 *Value + ) +{ + return ++*Value; +} + +/** + Performs an atomic decrement of an 32-bit unsigned integer. + + Performs an atomic decrement of the 32-bit unsigned integer specified by + Value and returns the decrement value. The decrement operation must be + performed using MP safe mechanisms. The state of the return value is not + guaranteed to be MP safe. + + @param Value A pointer to the 32-bit value to decrement. + + @return The decrement value. + +**/ +UINT32 +EFIAPI +InternalSyncDecrement ( + IN volatile UINT32 *Value + ) +{ + return --*Value; +} diff --git a/MdePkg/Library/BaseLib/Ia32/ARShiftU64.S b/MdePkg/Library/BaseLib/Ia32/ARShiftU64.S index 84762082ba..5498d2e991 100644 --- a/MdePkg/Library/BaseLib/Ia32/ARShiftU64.S +++ b/MdePkg/Library/BaseLib/Ia32/ARShiftU64.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.S b/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.S index 59a1143259..e82434b670 100644 --- a/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.S +++ b/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ ; # Copyright (c) 2006, Intel Corporation # All rights reserved. This program and the accompanying materials diff --git a/MdePkg/Library/BaseLib/Ia32/CpuFlushTlb.S b/MdePkg/Library/BaseLib/Ia32/CpuFlushTlb.S index 07550ff412..f8b1cdc7ee 100644 --- a/MdePkg/Library/BaseLib/Ia32/CpuFlushTlb.S +++ b/MdePkg/Library/BaseLib/Ia32/CpuFlushTlb.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ ; # Copyright (c) 2006, Intel Corporation # All rights reserved. This program and the accompanying materials diff --git a/MdePkg/Library/BaseLib/Ia32/CpuId.S b/MdePkg/Library/BaseLib/Ia32/CpuId.S index 2373ad1a8e..6f41e72227 100644 --- a/MdePkg/Library/BaseLib/Ia32/CpuId.S +++ b/MdePkg/Library/BaseLib/Ia32/CpuId.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/CpuIdEx.S b/MdePkg/Library/BaseLib/Ia32/CpuIdEx.S index 2d7ec493cf..48554cc96b 100644 --- a/MdePkg/Library/BaseLib/Ia32/CpuIdEx.S +++ b/MdePkg/Library/BaseLib/Ia32/CpuIdEx.S @@ -1,72 +1,67 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# CpuIdEx.Asm -# -# Abstract: -# -# AsmCpuidEx function -# -# Notes: -# -#------------------------------------------------------------------------------ - - .686: - .code: - -#------------------------------------------------------------------------------ -# UINT32 -# EFIAPI -# AsmCpuidEx ( -# IN UINT32 RegisterInEax, -# IN UINT32 RegisterInEcx, -# OUT UINT32 *RegisterOutEax OPTIONAL, -# OUT UINT32 *RegisterOutEbx OPTIONAL, -# OUT UINT32 *RegisterOutEcx OPTIONAL, -# OUT UINT32 *RegisterOutEdx OPTIONAL -# ) -#------------------------------------------------------------------------------ -.globl ASM_PFX(AsmCpuidEx) -ASM_PFX(AsmCpuidEx): - push %ebx - push %ebp - movl %esp, %ebp - movl 12(%ebp), %eax - movl 16(%ebp), %ecx - cpuid - push %ecx - movl 20(%ebp), %ecx - jecxz L1 - movl %eax, (%ecx) -L1: - movl 24(%ebp), %ecx - jecxz L2 - movl %ebx, (%ecx) -L2: - movl 28(%ebp), %ecx - jecxz L3 - popl (%ecx) -L3: - movl 32(%ebp), %edx - jecxz L4 - movl %edx, (%ecx) -L4: - movl 12(%ebp), %eax - leave - pop %ebx - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# CpuIdEx.Asm +# +# Abstract: +# +# AsmCpuidEx function +# +# Notes: +# +#------------------------------------------------------------------------------ + + .686: + .code: + +#------------------------------------------------------------------------------ +# UINT32 +# EFIAPI +# AsmCpuidEx ( +# IN UINT32 RegisterInEax, +# IN UINT32 RegisterInEcx, +# OUT UINT32 *RegisterOutEax OPTIONAL, +# OUT UINT32 *RegisterOutEbx OPTIONAL, +# OUT UINT32 *RegisterOutEcx OPTIONAL, +# OUT UINT32 *RegisterOutEdx OPTIONAL +# ) +#------------------------------------------------------------------------------ +.globl ASM_PFX(AsmCpuidEx) +ASM_PFX(AsmCpuidEx): + push %ebx + push %ebp + movl %esp, %ebp + movl 12(%ebp), %eax + movl 16(%ebp), %ecx + cpuid + push %ecx + movl 20(%ebp), %ecx + jecxz L1 + movl %eax, (%ecx) +L1: + movl 24(%ebp), %ecx + jecxz L2 + movl %ebx, (%ecx) +L2: + movl 28(%ebp), %ecx + jecxz L3 + popl (%ecx) +L3: + movl 32(%ebp), %edx + jecxz L4 + movl %edx, (%ecx) +L4: + movl 12(%ebp), %eax + leave + pop %ebx + ret diff --git a/MdePkg/Library/BaseLib/Ia32/CpuPause.S b/MdePkg/Library/BaseLib/Ia32/CpuPause.S index 3661b1ff86..5fef9c8d5c 100644 --- a/MdePkg/Library/BaseLib/Ia32/CpuPause.S +++ b/MdePkg/Library/BaseLib/Ia32/CpuPause.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ ; # Copyright (c) 2006, Intel Corporation # All rights reserved. This program and the accompanying materials diff --git a/MdePkg/Library/BaseLib/Ia32/CpuSleep.S b/MdePkg/Library/BaseLib/Ia32/CpuSleep.S index 8bf9d55ba7..ac39e8fcba 100644 --- a/MdePkg/Library/BaseLib/Ia32/CpuSleep.S +++ b/MdePkg/Library/BaseLib/Ia32/CpuSleep.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ ; # Copyright (c) 2006, Intel Corporation # All rights reserved. This program and the accompanying materials diff --git a/MdePkg/Library/BaseLib/Ia32/DisableInterrupts.S b/MdePkg/Library/BaseLib/Ia32/DisableInterrupts.S index 3a7a81d1b6..ea04225fd6 100644 --- a/MdePkg/Library/BaseLib/Ia32/DisableInterrupts.S +++ b/MdePkg/Library/BaseLib/Ia32/DisableInterrupts.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/DisablePaging32.S b/MdePkg/Library/BaseLib/Ia32/DisablePaging32.S index f950b058b3..7898e8103a 100644 --- a/MdePkg/Library/BaseLib/Ia32/DisablePaging32.S +++ b/MdePkg/Library/BaseLib/Ia32/DisablePaging32.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/DivU64x32.S b/MdePkg/Library/BaseLib/Ia32/DivU64x32.S index 170819858e..b858278e64 100644 --- a/MdePkg/Library/BaseLib/Ia32/DivU64x32.S +++ b/MdePkg/Library/BaseLib/Ia32/DivU64x32.S @@ -1,46 +1,41 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# DivU64x32.asm -# -# Abstract: -# -# Calculate the quotient of a 64-bit integer by a 32-bit integer -# -#------------------------------------------------------------------------------ - -.globl ASM_PFX(InternalMathDivU64x32) - -#------------------------------------------------------------------------------ -# UINT64 -# EFIAPI -# InternalMathDivU64x32 ( -# IN UINT64 Dividend, -# IN UINT32 Divisor -# ); -#------------------------------------------------------------------------------ -ASM_PFX(InternalMathDivU64x32): - movl 8(%esp), %eax - movl 12(%esp), %ecx - xorl %edx, %edx - divl %ecx - push %eax - movl 8(%esp), %eax - divl %ecx - pop %edx - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# DivU64x32.asm +# +# Abstract: +# +# Calculate the quotient of a 64-bit integer by a 32-bit integer +# +#------------------------------------------------------------------------------ + +.globl ASM_PFX(InternalMathDivU64x32) + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# InternalMathDivU64x32 ( +# IN UINT64 Dividend, +# IN UINT32 Divisor +# ); +#------------------------------------------------------------------------------ +ASM_PFX(InternalMathDivU64x32): + movl 8(%esp), %eax + movl 12(%esp), %ecx + xorl %edx, %edx + divl %ecx + push %eax + movl 8(%esp), %eax + divl %ecx + pop %edx + ret diff --git a/MdePkg/Library/BaseLib/Ia32/DivU64x32Remainder.S b/MdePkg/Library/BaseLib/Ia32/DivU64x32Remainder.S index 987e0ead89..974373d284 100644 --- a/MdePkg/Library/BaseLib/Ia32/DivU64x32Remainder.S +++ b/MdePkg/Library/BaseLib/Ia32/DivU64x32Remainder.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/DivU64x64Remainder.S b/MdePkg/Library/BaseLib/Ia32/DivU64x64Remainder.S index 36008bf567..cac7169d58 100644 --- a/MdePkg/Library/BaseLib/Ia32/DivU64x64Remainder.S +++ b/MdePkg/Library/BaseLib/Ia32/DivU64x64Remainder.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/EnableDisableInterrupts.S b/MdePkg/Library/BaseLib/Ia32/EnableDisableInterrupts.S index 2799832d24..c5742aee53 100644 --- a/MdePkg/Library/BaseLib/Ia32/EnableDisableInterrupts.S +++ b/MdePkg/Library/BaseLib/Ia32/EnableDisableInterrupts.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/EnableInterrupts.S b/MdePkg/Library/BaseLib/Ia32/EnableInterrupts.S index 2c83e261a4..2d608036f7 100644 --- a/MdePkg/Library/BaseLib/Ia32/EnableInterrupts.S +++ b/MdePkg/Library/BaseLib/Ia32/EnableInterrupts.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/EnablePaging32.S b/MdePkg/Library/BaseLib/Ia32/EnablePaging32.S index 054a5c9d06..df5d67cfac 100644 --- a/MdePkg/Library/BaseLib/Ia32/EnablePaging32.S +++ b/MdePkg/Library/BaseLib/Ia32/EnablePaging32.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/EnablePaging64.S b/MdePkg/Library/BaseLib/Ia32/EnablePaging64.S index 44b7e16558..ffa9beb0a1 100644 --- a/MdePkg/Library/BaseLib/Ia32/EnablePaging64.S +++ b/MdePkg/Library/BaseLib/Ia32/EnablePaging64.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/EnablePaging64.asm b/MdePkg/Library/BaseLib/Ia32/EnablePaging64.asm index 3755c0585b..435bb39105 100644 --- a/MdePkg/Library/BaseLib/Ia32/EnablePaging64.asm +++ b/MdePkg/Library/BaseLib/Ia32/EnablePaging64.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/FlushCacheLine.S b/MdePkg/Library/BaseLib/Ia32/FlushCacheLine.S index b8c87c23c1..07a92619d2 100644 --- a/MdePkg/Library/BaseLib/Ia32/FlushCacheLine.S +++ b/MdePkg/Library/BaseLib/Ia32/FlushCacheLine.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/FxRestore.S b/MdePkg/Library/BaseLib/Ia32/FxRestore.S index 4560751c62..9cfa14be0f 100644 --- a/MdePkg/Library/BaseLib/Ia32/FxRestore.S +++ b/MdePkg/Library/BaseLib/Ia32/FxRestore.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/FxSave.S b/MdePkg/Library/BaseLib/Ia32/FxSave.S index 343db36a9f..8857a8ec77 100644 --- a/MdePkg/Library/BaseLib/Ia32/FxSave.S +++ b/MdePkg/Library/BaseLib/Ia32/FxSave.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange32.S b/MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange32.S index 0abb605aa3..a0a6ad9eb0 100644 --- a/MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange32.S +++ b/MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange32.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange64.S b/MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange64.S index ee3278ca09..98a20a5e29 100644 --- a/MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange64.S +++ b/MdePkg/Library/BaseLib/Ia32/InterlockedCompareExchange64.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/InterlockedDecrement.S b/MdePkg/Library/BaseLib/Ia32/InterlockedDecrement.S index a92ea6ba37..dc8f7215cc 100644 --- a/MdePkg/Library/BaseLib/Ia32/InterlockedDecrement.S +++ b/MdePkg/Library/BaseLib/Ia32/InterlockedDecrement.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/InterlockedIncrement.S b/MdePkg/Library/BaseLib/Ia32/InterlockedIncrement.S index 88c35d5c0c..ecbbc7540c 100644 --- a/MdePkg/Library/BaseLib/Ia32/InterlockedIncrement.S +++ b/MdePkg/Library/BaseLib/Ia32/InterlockedIncrement.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/Invd.S b/MdePkg/Library/BaseLib/Ia32/Invd.S index 4e85d2935f..0a0c1a244a 100644 --- a/MdePkg/Library/BaseLib/Ia32/Invd.S +++ b/MdePkg/Library/BaseLib/Ia32/Invd.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/LRotU64.S b/MdePkg/Library/BaseLib/Ia32/LRotU64.S index fe3ab60af6..3b866e2700 100644 --- a/MdePkg/Library/BaseLib/Ia32/LRotU64.S +++ b/MdePkg/Library/BaseLib/Ia32/LRotU64.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/LShiftU64.S b/MdePkg/Library/BaseLib/Ia32/LShiftU64.S index 9c93242bd4..a4b99eb80a 100644 --- a/MdePkg/Library/BaseLib/Ia32/LShiftU64.S +++ b/MdePkg/Library/BaseLib/Ia32/LShiftU64.S @@ -1,46 +1,41 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# LShiftU64.asm -# -# Abstract: -# -# 64-bit left shift function for IA-32 -# -#------------------------------------------------------------------------------ - -.globl ASM_PFX(InternalMathLShiftU64) - -#------------------------------------------------------------------------------ -# UINT64 -# EFIAPI -# InternalMathLShiftU64 ( -# IN UINT64 Operand, -# IN UINTN Count -# ); -#------------------------------------------------------------------------------ -ASM_PFX(InternalMathLShiftU64): - movb 12(%esp), %cl - xorl %eax, %eax - movl 4(%esp), %edx - testb $32, %cl - cmovz %edx, %eax - cmovz 0x8(%esp), %edx - shld %cl, %eax, %edx - shl %cl, %eax - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# LShiftU64.asm +# +# Abstract: +# +# 64-bit left shift function for IA-32 +# +#------------------------------------------------------------------------------ + +.globl ASM_PFX(InternalMathLShiftU64) + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# InternalMathLShiftU64 ( +# IN UINT64 Operand, +# IN UINTN Count +# ); +#------------------------------------------------------------------------------ +ASM_PFX(InternalMathLShiftU64): + movb 12(%esp), %cl + xorl %eax, %eax + movl 4(%esp), %edx + testb $32, %cl + cmovz %edx, %eax + cmovz 0x8(%esp), %edx + shld %cl, %eax, %edx + shl %cl, %eax + ret diff --git a/MdePkg/Library/BaseLib/Ia32/LongJump.S b/MdePkg/Library/BaseLib/Ia32/LongJump.S index 95dd444913..0b76896085 100644 --- a/MdePkg/Library/BaseLib/Ia32/LongJump.S +++ b/MdePkg/Library/BaseLib/Ia32/LongJump.S @@ -1,46 +1,41 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# LongJump.Asm -# -# Abstract: -# -# Implementation of _LongJump() on IA-32. -# -#------------------------------------------------------------------------------ - -.globl ASM_PFX(InternalLongJump) - -#------------------------------------------------------------------------------ -# VOID -# EFIAPI -# InternalLongJump ( -# IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer, -# IN UINTN Value -# ); -#------------------------------------------------------------------------------ -ASM_PFX(InternalLongJump): - pop %eax - pop %edx - pop %eax - movl (%edx), %ebx - movl 4(%edx), %esi - movl 8(%edx), %edi - movl 12(%edx), %ebp - movl 16(%edx), %esp - jmp *20(%edx) +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# LongJump.Asm +# +# Abstract: +# +# Implementation of _LongJump() on IA-32. +# +#------------------------------------------------------------------------------ + +.globl ASM_PFX(InternalLongJump) + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# InternalLongJump ( +# IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer, +# IN UINTN Value +# ); +#------------------------------------------------------------------------------ +ASM_PFX(InternalLongJump): + pop %eax + pop %edx + pop %eax + movl (%edx), %ebx + movl 4(%edx), %esi + movl 8(%edx), %edi + movl 12(%edx), %ebp + movl 16(%edx), %esp + jmp *20(%edx) diff --git a/MdePkg/Library/BaseLib/Ia32/ModU64x32.S b/MdePkg/Library/BaseLib/Ia32/ModU64x32.S index decfeaac3b..00dc6a08ab 100644 --- a/MdePkg/Library/BaseLib/Ia32/ModU64x32.S +++ b/MdePkg/Library/BaseLib/Ia32/ModU64x32.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/Monitor.S b/MdePkg/Library/BaseLib/Ia32/Monitor.S index 2651124ea3..6e9284dcd4 100644 --- a/MdePkg/Library/BaseLib/Ia32/Monitor.S +++ b/MdePkg/Library/BaseLib/Ia32/Monitor.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/MultU64x32.S b/MdePkg/Library/BaseLib/Ia32/MultU64x32.S index 5c44957838..b9d1eb8ca7 100644 --- a/MdePkg/Library/BaseLib/Ia32/MultU64x32.S +++ b/MdePkg/Library/BaseLib/Ia32/MultU64x32.S @@ -1,46 +1,41 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# MultU64x32.asm -# -# Abstract: -# -# Calculate the product of a 64-bit integer and a 32-bit integer -# -#------------------------------------------------------------------------------ - - .386: - .code: - -.globl ASM_PFX(InternalMathMultU64x32) - -#------------------------------------------------------------------------------ -# UINT64 -# EFIAPI -# InternalMathMultU64x32 ( -# IN UINT64 Multiplicand, -# IN UINT32 Multiplier -# ); -#------------------------------------------------------------------------------ -ASM_PFX(InternalMathMultU64x32): - movl 12(%esp), %ecx - movl %ecx, %eax - imull 8(%esp), %ecx - mull 0x4(%esp) - addl %ecx, %edx - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# MultU64x32.asm +# +# Abstract: +# +# Calculate the product of a 64-bit integer and a 32-bit integer +# +#------------------------------------------------------------------------------ + + .386: + .code: + +.globl ASM_PFX(InternalMathMultU64x32) + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# InternalMathMultU64x32 ( +# IN UINT64 Multiplicand, +# IN UINT32 Multiplier +# ); +#------------------------------------------------------------------------------ +ASM_PFX(InternalMathMultU64x32): + movl 12(%esp), %ecx + movl %ecx, %eax + imull 8(%esp), %ecx + mull 0x4(%esp) + addl %ecx, %edx + ret diff --git a/MdePkg/Library/BaseLib/Ia32/MultU64x64.S b/MdePkg/Library/BaseLib/Ia32/MultU64x64.S index 40dda6f1a4..03523865f6 100644 --- a/MdePkg/Library/BaseLib/Ia32/MultU64x64.S +++ b/MdePkg/Library/BaseLib/Ia32/MultU64x64.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/Mwait.S b/MdePkg/Library/BaseLib/Ia32/Mwait.S index 80782b7f84..12f6a87511 100644 --- a/MdePkg/Library/BaseLib/Ia32/Mwait.S +++ b/MdePkg/Library/BaseLib/Ia32/Mwait.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/RRotU64.S b/MdePkg/Library/BaseLib/Ia32/RRotU64.S index 7e8984287a..35935639b9 100644 --- a/MdePkg/Library/BaseLib/Ia32/RRotU64.S +++ b/MdePkg/Library/BaseLib/Ia32/RRotU64.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/RShiftU64.S b/MdePkg/Library/BaseLib/Ia32/RShiftU64.S index 7d58fd6c47..ca78394e39 100644 --- a/MdePkg/Library/BaseLib/Ia32/RShiftU64.S +++ b/MdePkg/Library/BaseLib/Ia32/RShiftU64.S @@ -1,49 +1,44 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# RShiftU64.asm -# -# Abstract: -# -# 64-bit logical right shift function for IA-32 -# -#------------------------------------------------------------------------------ - - .686: - .code: - -.globl ASM_PFX(InternalMathRShiftU64) - -#------------------------------------------------------------------------------ -# UINT64 -# EFIAPI -# InternalMathRShiftU64 ( -# IN UINT64 Operand, -# IN UINTN Count -# ); -#------------------------------------------------------------------------------ -ASM_PFX(InternalMathRShiftU64): - movb 12(%esp), %cl - xorl %edx, %edx - movl 8(%esp), %eax - testb $32, %cl - cmovz %eax, %edx - cmovz 0x4(%esp), %eax - shrdl %cl, %edx, %eax - shr %cl, %edx - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# RShiftU64.asm +# +# Abstract: +# +# 64-bit logical right shift function for IA-32 +# +#------------------------------------------------------------------------------ + + .686: + .code: + +.globl ASM_PFX(InternalMathRShiftU64) + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# InternalMathRShiftU64 ( +# IN UINT64 Operand, +# IN UINTN Count +# ); +#------------------------------------------------------------------------------ +ASM_PFX(InternalMathRShiftU64): + movb 12(%esp), %cl + xorl %edx, %edx + movl 8(%esp), %eax + testb $32, %cl + cmovz %eax, %edx + cmovz 0x4(%esp), %eax + shrdl %cl, %edx, %eax + shr %cl, %edx + ret diff --git a/MdePkg/Library/BaseLib/Ia32/ReadCr0.S b/MdePkg/Library/BaseLib/Ia32/ReadCr0.S index b08c7d75a7..3433344b7b 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadCr0.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadCr0.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadCr2.S b/MdePkg/Library/BaseLib/Ia32/ReadCr2.S index 0b82a25906..d308895367 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadCr2.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadCr2.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadCr3.S b/MdePkg/Library/BaseLib/Ia32/ReadCr3.S index f973dbef23..aaec1f01d0 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadCr3.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadCr3.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadCr4.S b/MdePkg/Library/BaseLib/Ia32/ReadCr4.S index ee94991e8c..442d359eda 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadCr4.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadCr4.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadCs.S b/MdePkg/Library/BaseLib/Ia32/ReadCs.S index 7406cfba3a..a3ad69d304 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadCs.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadCs.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr0.S b/MdePkg/Library/BaseLib/Ia32/ReadDr0.S index 1ba42d9e65..d4c61f1484 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadDr0.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr0.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr1.S b/MdePkg/Library/BaseLib/Ia32/ReadDr1.S index 4fe89da5d7..27c5554257 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadDr1.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr1.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr2.S b/MdePkg/Library/BaseLib/Ia32/ReadDr2.S index 916fad740d..cca84b9efd 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadDr2.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr2.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr3.S b/MdePkg/Library/BaseLib/Ia32/ReadDr3.S index 3505589441..60b0550381 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadDr3.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr3.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr4.S b/MdePkg/Library/BaseLib/Ia32/ReadDr4.S index 44c56aa624..84883df971 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadDr4.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr4.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr5.S b/MdePkg/Library/BaseLib/Ia32/ReadDr5.S index 3a012256ef..5abb226b91 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadDr5.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr5.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr6.S b/MdePkg/Library/BaseLib/Ia32/ReadDr6.S index e5857b055a..9594851c7e 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadDr6.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr6.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDr7.S b/MdePkg/Library/BaseLib/Ia32/ReadDr7.S index 8054b968f1..4ba13efcb4 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadDr7.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadDr7.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadDs.S b/MdePkg/Library/BaseLib/Ia32/ReadDs.S index 41e6bd4d92..c3dc8451ad 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadDs.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadDs.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadEflags.S b/MdePkg/Library/BaseLib/Ia32/ReadEflags.S index 95b219159f..ab5e522739 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadEflags.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadEflags.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadEs.S b/MdePkg/Library/BaseLib/Ia32/ReadEs.S index ed60065fa2..26ed55d9e1 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadEs.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadEs.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadFs.S b/MdePkg/Library/BaseLib/Ia32/ReadFs.S index 19d89ef7b3..bd38c6ac10 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadFs.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadFs.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadGdtr.S b/MdePkg/Library/BaseLib/Ia32/ReadGdtr.S index ba6564c38a..8869164606 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadGdtr.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadGdtr.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadGs.S b/MdePkg/Library/BaseLib/Ia32/ReadGs.S index 1862596288..82b396661d 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadGs.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadGs.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadIdtr.S b/MdePkg/Library/BaseLib/Ia32/ReadIdtr.S index 7880e7a8af..0e5d32e3d8 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadIdtr.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadIdtr.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadLdtr.S b/MdePkg/Library/BaseLib/Ia32/ReadLdtr.S index 301edbdced..addb1757d0 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadLdtr.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadLdtr.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm0.S b/MdePkg/Library/BaseLib/Ia32/ReadMm0.S index c6434fcc79..f191337f68 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadMm0.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm0.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm1.S b/MdePkg/Library/BaseLib/Ia32/ReadMm1.S index 775a517219..790541aaeb 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadMm1.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm1.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm2.S b/MdePkg/Library/BaseLib/Ia32/ReadMm2.S index 7c23a67f68..231d62c762 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadMm2.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm2.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm3.S b/MdePkg/Library/BaseLib/Ia32/ReadMm3.S index ad888b1be1..1e1f6dd684 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadMm3.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm3.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm4.S b/MdePkg/Library/BaseLib/Ia32/ReadMm4.S index a69e914957..5da446befe 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadMm4.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm4.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm5.S b/MdePkg/Library/BaseLib/Ia32/ReadMm5.S index bc047a157f..5528fe1812 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadMm5.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm5.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm6.S b/MdePkg/Library/BaseLib/Ia32/ReadMm6.S index a16871779f..5d9bd11269 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadMm6.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm6.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMm7.S b/MdePkg/Library/BaseLib/Ia32/ReadMm7.S index c273279171..26866b6a09 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadMm7.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadMm7.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadMsr64.S b/MdePkg/Library/BaseLib/Ia32/ReadMsr64.S index e0655b2077..505b7e688b 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadMsr64.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadMsr64.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadPmc.S b/MdePkg/Library/BaseLib/Ia32/ReadPmc.S index fd75ef486e..055e99c25a 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadPmc.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadPmc.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadSs.S b/MdePkg/Library/BaseLib/Ia32/ReadSs.S index 752cb26081..4f15248f1a 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadSs.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadSs.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadTr.S b/MdePkg/Library/BaseLib/Ia32/ReadTr.S index 8b095bedd4..af12dd2f3f 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadTr.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadTr.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/ReadTsc.S b/MdePkg/Library/BaseLib/Ia32/ReadTsc.S index a4436dd278..cab29661ae 100644 --- a/MdePkg/Library/BaseLib/Ia32/ReadTsc.S +++ b/MdePkg/Library/BaseLib/Ia32/ReadTsc.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/SetJump.S b/MdePkg/Library/BaseLib/Ia32/SetJump.S index a3a70b6cf1..c8993084ac 100644 --- a/MdePkg/Library/BaseLib/Ia32/SetJump.S +++ b/MdePkg/Library/BaseLib/Ia32/SetJump.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/SwapBytes64.S b/MdePkg/Library/BaseLib/Ia32/SwapBytes64.S index 313f4164fa..c15ca444f0 100644 --- a/MdePkg/Library/BaseLib/Ia32/SwapBytes64.S +++ b/MdePkg/Library/BaseLib/Ia32/SwapBytes64.S @@ -1,43 +1,38 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# CpuId.Asm -# -# Abstract: -# -# AsmCpuid function -# -# Notes: -# -#------------------------------------------------------------------------------ - - -#------------------------------------------------------------------------------ -# UINT64 -# EFIAPI -# InternalMathSwapBytes64 ( -# IN UINT64 Operand -# ); -#------------------------------------------------------------------------------ -.globl ASM_PFX(InternalMathSwapBytes64) -ASM_PFX(InternalMathSwapBytes64): - movl 8(%esp), %eax - movl 4(%esp), %edx - bswapl %eax - bswapl %edx - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# CpuId.Asm +# +# Abstract: +# +# AsmCpuid function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# InternalMathSwapBytes64 ( +# IN UINT64 Operand +# ); +#------------------------------------------------------------------------------ +.globl ASM_PFX(InternalMathSwapBytes64) +ASM_PFX(InternalMathSwapBytes64): + movl 8(%esp), %eax + movl 4(%esp), %edx + bswapl %eax + bswapl %edx + ret diff --git a/MdePkg/Library/BaseLib/Ia32/Thunk16.S b/MdePkg/Library/BaseLib/Ia32/Thunk16.S index ca72d0b544..c45cdb0a2d 100644 --- a/MdePkg/Library/BaseLib/Ia32/Thunk16.S +++ b/MdePkg/Library/BaseLib/Ia32/Thunk16.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/Wbinvd.S b/MdePkg/Library/BaseLib/Ia32/Wbinvd.S index 9c31adc589..b19348dad9 100644 --- a/MdePkg/Library/BaseLib/Ia32/Wbinvd.S +++ b/MdePkg/Library/BaseLib/Ia32/Wbinvd.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteCr0.S b/MdePkg/Library/BaseLib/Ia32/WriteCr0.S index 5cd75cf33d..6bce3a4d50 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteCr0.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteCr0.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteCr2.S b/MdePkg/Library/BaseLib/Ia32/WriteCr2.S index 8128e8363d..64d2c1b534 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteCr2.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteCr2.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteCr3.S b/MdePkg/Library/BaseLib/Ia32/WriteCr3.S index 06f7208297..767182ee4e 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteCr3.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteCr3.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteCr4.S b/MdePkg/Library/BaseLib/Ia32/WriteCr4.S index f748c1884a..dc6828ac91 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteCr4.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteCr4.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr0.S b/MdePkg/Library/BaseLib/Ia32/WriteDr0.S index f1fd87858d..c05af0ec1e 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteDr0.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr0.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr1.S b/MdePkg/Library/BaseLib/Ia32/WriteDr1.S index 291e63736a..87031768ac 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteDr1.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr1.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr2.S b/MdePkg/Library/BaseLib/Ia32/WriteDr2.S index 6b6a50a198..ca4e301b93 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteDr2.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr2.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr3.S b/MdePkg/Library/BaseLib/Ia32/WriteDr3.S index 4201c4a1de..ed23db7e90 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteDr3.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr3.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr4.S b/MdePkg/Library/BaseLib/Ia32/WriteDr4.S index ef76bddd16..d17595213a 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteDr4.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr4.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr5.S b/MdePkg/Library/BaseLib/Ia32/WriteDr5.S index f10b56e8ee..7e3bb94f1f 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteDr5.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr5.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr6.S b/MdePkg/Library/BaseLib/Ia32/WriteDr6.S index 1cdd8160c1..0827f347bd 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteDr6.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr6.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteDr7.S b/MdePkg/Library/BaseLib/Ia32/WriteDr7.S index ce1e29b09c..1f3e916675 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteDr7.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteDr7.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteGdtr.S b/MdePkg/Library/BaseLib/Ia32/WriteGdtr.S index 07ec92e44c..3aedf7dd68 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteGdtr.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteGdtr.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteIdtr.S b/MdePkg/Library/BaseLib/Ia32/WriteIdtr.S index 739edde618..c3e6ad3353 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteIdtr.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteIdtr.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteLdtr.S b/MdePkg/Library/BaseLib/Ia32/WriteLdtr.S index 1bb4678337..8b2cc3c029 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteLdtr.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteLdtr.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm0.S b/MdePkg/Library/BaseLib/Ia32/WriteMm0.S index 87a28165bc..ef70763e52 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteMm0.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm0.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm1.S b/MdePkg/Library/BaseLib/Ia32/WriteMm1.S index 05182fb0fc..74a3d711b5 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteMm1.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm1.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm2.S b/MdePkg/Library/BaseLib/Ia32/WriteMm2.S index c34ceccf1b..a3c548dcec 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteMm2.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm2.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm3.S b/MdePkg/Library/BaseLib/Ia32/WriteMm3.S index 01250e8f44..98b11a5818 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteMm3.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm3.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm4.S b/MdePkg/Library/BaseLib/Ia32/WriteMm4.S index cc6ec7d173..107c695cf7 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteMm4.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm4.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm5.S b/MdePkg/Library/BaseLib/Ia32/WriteMm5.S index b0909614b5..be6a6f78b2 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteMm5.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm5.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm6.S b/MdePkg/Library/BaseLib/Ia32/WriteMm6.S index 6d657c6673..51a8973460 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteMm6.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm6.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMm7.S b/MdePkg/Library/BaseLib/Ia32/WriteMm7.S index 52c599c0fd..824bbeae17 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteMm7.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteMm7.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ia32/WriteMsr64.S b/MdePkg/Library/BaseLib/Ia32/WriteMsr64.S index f310e887ab..5c12c981a9 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteMsr64.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteMsr64.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseLib/Ipf/AccessDbr.s b/MdePkg/Library/BaseLib/Ipf/AccessDbr.s new file mode 100644 index 0000000000..49d1fecbbf --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/AccessDbr.s @@ -0,0 +1,118 @@ +/// @file +/// IPF specific Debug Breakpoint Registers accessing 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. +/// +/// Module Name: AccessDbr.s +/// +/// + +//--------------------------------------------------------------------------------- +//++ +// AsmReadDbr +// +// This routine is used to Reads the current value of Data Breakpoint Register (DBR). +// +// Arguments : +// +// On Entry : The 8-bit DBR index to read. +// +// Return Value: The current value of DBR by Index. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadDbr, @function +.proc AsmReadDbr +.regstk 1, 0, 0, 0 + +AsmReadDbr:: + mov r8 = dbr[in0];; + br.ret.dpnt b0;; +.endp AsmReadDbr + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteDbr +// +// This routine is used to write the current value to Data Breakpoint Register (DBR). +// +// Arguments : +// +// On Entry : The 8-bit DBR index to read. +// The value should be written to DBR +// +// Return Value: The value written to DBR. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteDbr, @function +.proc AsmWriteDbr +.regstk 2, 0, 0, 0 + +AsmWriteDbr:: + mov dbr[in0] = in1 + mov r8 = in1;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmWriteDbr + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadIbr +// +// This routine is used to Reads the current value of Instruction Breakpoint Register (IBR). +// +// Arguments : +// +// On Entry : The 8-bit IBR index. +// +// Return Value: The current value of IBR by Index. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadIbr, @function +.proc AsmReadIbr +.regstk 1, 0, 0, 0 + +AsmReadIbr:: + mov r8 = ibr[in0];; + br.ret.dpnt b0;; +.endp AsmReadIbr + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteIbr +// +// This routine is used to write the current value to Instruction Breakpoint Register (IBR). +// +// Arguments : +// +// On Entry : The 8-bit IBR index. +// The value should be written to IBR +// +// Return Value: The value written to IBR. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteIbr, @function +.proc AsmWriteIbr +.regstk 2, 0, 0, 0 + +AsmWriteIbr:: + mov ibr[in0] = in1 + mov r8 = in1;; + srlz.i;; + br.ret.dpnt b0;; +.endp AsmWriteIbr diff --git a/MdePkg/Library/BaseLib/Ipf/AccessEicr.s b/MdePkg/Library/BaseLib/Ipf/AccessEicr.s new file mode 100644 index 0000000000..03d7e034f8 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/AccessEicr.s @@ -0,0 +1,512 @@ +/// @file +/// IPF specific External Interrupt Control Registers accessing 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. +/// +/// Module Name: AccessEicr.s +/// +/// + +//--------------------------------------------------------------------------------- +//++ +// AsmReadLid +// +// This routine is used to read the value of Local Interrupt ID Register (LID). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of LID. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadLid, @function +.proc AsmReadLid + +AsmReadLid:: + mov r8 = cr.lid;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmReadLid + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteLid +// +// This routine is used to write the value to Local Interrupt ID Register (LID). +// +// Arguments : +// +// On Entry : The value need to be written to LID. +// +// Return Value: The value written to LID. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteLid, @function +.proc AsmWriteLid +.regstk 1, 0, 0, 0 + +AsmWriteLid:: + mov cr.lid = in0 + mov r8 = in0;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmWriteLid + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadIvr +// +// This routine is used to read the value of External Interrupt Vector Register (IVR). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of IVR. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadIvr, @function +.proc AsmReadIvr + +AsmReadIvr:: + mov r8 = cr.ivr;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmReadIvr + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadTpr +// +// This routine is used to read the value of Task Priority Register (TPR). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of TPR. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadTpr, @function +.proc AsmReadTpr + +AsmReadTpr:: + mov r8 = cr.tpr;; + br.ret.dpnt b0;; +.endp AsmReadTpr + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteTpr +// +// This routine is used to write the value to Task Priority Register (TPR). +// +// Arguments : +// +// On Entry : The value need to be written to TPR. +// +// Return Value: The value written to TPR. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteTpr, @function +.proc AsmWriteTpr +.regstk 1, 0, 0, 0 + +AsmWriteTpr:: + mov cr.tpr = in0 + mov r8 = in0;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmWriteTpr + + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteEoi +// +// This routine is used to write the value to End of External Interrupt Register (EOI). +// +// Arguments : +// +// On Entry : The value need to be written to EOI. +// +// Return Value: The value written to EOI. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteEoi, @function +.proc AsmWriteEoi + +AsmWriteEoi:: + mov cr.eoi = r0;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmWriteEoi + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadIrr0 +// +// This routine is used to Read the value of External Interrupt Request Register 0 (IRR0). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of IRR0. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadIrr0, @function +.proc AsmReadIrr0 + +AsmReadIrr0:: + mov r8 = cr.irr0;; + br.ret.dpnt b0;; +.endp AsmReadIrr0 + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadIrr1 +// +// This routine is used to Read the value of External Interrupt Request Register 1 (IRR1). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of IRR1. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadIrr1, @function +.proc AsmReadIrr1 + +AsmReadIrr1:: + mov r8 = cr.irr1;; + br.ret.dpnt b0;; +.endp AsmReadIrr1 + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadIrr2 +// +// This routine is used to Read the value of External Interrupt Request Register 2 (IRR2). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of IRR2. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadIrr2, @function +.proc AsmReadIrr2 + +AsmReadIrr2:: + mov r8 = cr.irr2;; + br.ret.dpnt b0;; +.endp AsmReadIrr2 + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadIrr3 +// +// This routine is used to Read the value of External Interrupt Request Register 3 (IRR3). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of IRR3. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadIrr3, @function +.proc AsmReadIrr3 + +AsmReadIrr3:: + mov r8 = cr.irr3;; + br.ret.dpnt b0;; +.endp AsmReadIrr3 + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadItv +// +// This routine is used to Read the value of Interval Timer Vector Register (ITV). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of ITV. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadItv, @function +.proc AsmReadItv + +AsmReadItv:: + mov r8 = cr.itv;; + br.ret.dpnt b0;; +.endp AsmReadItv + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteItv +// +// This routine is used to write the value to Interval Timer Vector Register (ITV). +// +// Arguments : +// +// On Entry : The value need to be written to ITV +// +// Return Value: The value written to ITV. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteItv, @function +.proc AsmWriteItv +.regstk 1, 0, 0, 0 + +AsmWriteItv:: + mov cr.itv = in0 + mov r8 = in0;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmWriteItv + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadPmv +// +// This routine is used to Read the value of Performance Monitoring Vector Register (PMV). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of PMV. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadPmv, @function +.proc AsmReadPmv + +AsmReadPmv:: + mov r8 = cr.pmv;; + br.ret.dpnt b0;; +.endp AsmReadPmv + +//--------------------------------------------------------------------------------- +//++ +// AsmWritePmv +// +// This routine is used to write the value to Performance Monitoring Vector Register (PMV). +// +// Arguments : +// +// On Entry : The value need to be written to PMV +// +// Return Value: The value written to PMV. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWritePmv, @function +.proc AsmWritePmv +.regstk 1, 0, 0, 0 + +AsmWritePmv:: + mov cr.pmv = in0 + mov r8 = in0;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmWritePmv + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadCmcv +// +// This routine is used to Read the value of Corrected Machine Check Vector Register (CMCV). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of CMCV. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadCmcv, @function +.proc AsmReadCmcv + +AsmReadCmcv:: + mov r8 = cr.cmcv;; + br.ret.dpnt b0;; +.endp AsmReadCmcv + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteCmcv +// +// This routine is used to write the value to Corrected Machine Check Vector Register (CMCV). +// +// Arguments : +// +// On Entry : The value need to be written to CMCV +// +// Return Value: The value written to CMCV. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteCmcv, @function +.proc AsmWriteCmcv +.regstk 1, 0, 0, 0 + +AsmWriteCmcv:: + mov cr.cmcv = in0 + mov r8 = in0;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmWriteCmcv + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadLrr0 +// +// This routine is used to read the value of Local Redirection Register 0 (LRR0). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of LRR0. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadLrr0, @function +.proc AsmReadLrr0 + +AsmReadLrr0:: + mov r8 = cr.lrr0;; + br.ret.dpnt b0;; +.endp AsmReadLrr0 + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteLrr0 +// +// This routine is used to write the value to Local Redirection Register 0 (LRR0). +// +// Arguments : +// +// On Entry : The value need to be written to LRR0. +// +// Return Value: The value written to LRR0. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteLrr0, @function +.proc AsmWriteLrr0 +.regstk 1, 0, 0, 0 + +AsmWriteLrr0:: + mov cr.lrr0 = in0 + mov r8 = in0;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmWriteLrr0 + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadLrr1 +// +// This routine is used to read the value of Local Redirection Register 1 (LRR1). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of LRR1. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadLrr1, @function +.proc AsmReadLrr1 + +AsmReadLrr1:: + mov r8 = cr.lrr1;; + br.ret.dpnt b0;; +.endp AsmReadLrr1 + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteLrr1 +// +// This routine is used to write the value to Local Redirection Register 1 (LRR1). +// +// Arguments : +// +// On Entry : The value need to be written to LRR1. +// +// Return Value: The value written to LRR1. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteLrr1, @function +.proc AsmWriteLrr1 +.regstk 1, 0, 0, 0 + +AsmWriteLrr1:: + mov cr.lrr1 = in0 + mov r8 = in0;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmWriteLrr1 + diff --git a/MdePkg/Library/BaseLib/Ipf/AccessGcr.s b/MdePkg/Library/BaseLib/Ipf/AccessGcr.s new file mode 100644 index 0000000000..54b3a30a6d --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/AccessGcr.s @@ -0,0 +1,264 @@ +/// @file +/// IPF specific Global Control Registers accessing 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. +/// +/// Module Name: AccessGcr.s +/// +/// + +//--------------------------------------------------------------------------------- +//++ +// AsmReadDcr +// +// This routine is used to Read the value of Default Control Register (DCR). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of DCR. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadDcr, @function +.proc AsmReadDcr + +AsmReadDcr:: + mov r8 = cr.dcr;; + br.ret.dpnt b0;; +.endp AsmReadDcr + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteDcr +// +// This routine is used to write the value to Default Control Register (DCR). +// +// Arguments : +// +// On Entry : The value need to be written to DCR +// +// Return Value: The value written to DCR. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteDcr, @function +.proc AsmWriteDcr +.regstk 1, 0, 0, 0 + +AsmWriteDcr:: + mov cr.dcr = in0 + mov r8 = in0;; + srlz.i;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmWriteDcr + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadItc +// +// This routine is used to Read the value of Interval Timer Counter Register (ITC). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of ITC. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadItc, @function +.proc AsmReadItc + +AsmReadItc:: + mov r8 = ar.itc;; + br.ret.dpnt b0;; +.endp AsmReadItc + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteItc +// +// This routine is used to write the value to Interval Timer Counter Register (ITC). +// +// Arguments : +// +// On Entry : The value need to be written to the ITC +// +// Return Value: The value written to the ITC. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteItc, @function +.proc AsmWriteItc +.regstk 1, 0, 0, 0 + +AsmWriteItc:: + mov ar.itc = in0 + mov r8 = in0;; + br.ret.dpnt b0;; +.endp AsmWriteItc + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadItm +// +// This routine is used to Read the value of Interval Timer Match Register (ITM). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of ITM. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadItm, @function +.proc AsmReadItm + +AsmReadItm:: + mov r8 = cr.itm;; + br.ret.dpnt b0;; +.endp AsmReadItm + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteItm +// +// This routine is used to write the value to Interval Timer Match Register (ITM). +// +// Arguments : +// +// On Entry : The value need to be written to ITM +// +// Return Value: The value written to ITM. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteItm, @function +.proc AsmWriteItm +.regstk 1, 0, 0, 0 + +AsmWriteItm:: + mov cr.itm = in0 + mov r8 = in0;; + srlz.d; + br.ret.dpnt b0;; +.endp AsmWriteItm + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadIva +// +// This routine is used to read the value of Interruption Vector Address Register (IVA). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of IVA. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadIva, @function +.proc AsmReadIva + +AsmReadIva:: + mov r8 = cr.iva;; + br.ret.dpnt b0;; +.endp AsmReadIva + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteIva +// +// This routine is used to write the value to Interruption Vector Address Register (IVA). +// +// Arguments : +// +// On Entry : The value need to be written to IVA +// +// Return Value: The value written to IVA. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteIva, @function +.proc AsmWriteIva +.regstk 1, 0, 0, 0 + +AsmWriteIva:: + mov cr.iva = in0 + mov r8 = in0;; + br.ret.dpnt b0;; +.endp AsmWriteIva + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadPta +// +// This routine is used to read the value of Page Table Address Register (PTA). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current value of PTA. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadPta, @function +.proc AsmReadPta + +AsmReadPta:: + mov r8 = cr.pta;; + br.ret.dpnt b0;; +.endp AsmReadPta + +//--------------------------------------------------------------------------------- +//++ +// AsmWritePta +// +// This routine is used to write the value to Page Table Address Register (PTA)). +// +// Arguments : +// +// On Entry : The value need to be written to PTA +// +// Return Value: The value written to PTA. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWritePta, @function +.proc AsmWritePta +.regstk 1, 0, 0, 0 + +AsmWritePta:: + mov cr.pta = in0 + mov r8 = in0;; + srlz.i;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmWritePta \ No newline at end of file diff --git a/MdePkg/Library/BaseLib/Ipf/AccessGp.s b/MdePkg/Library/BaseLib/Ipf/AccessGp.s new file mode 100644 index 0000000000..5c5f20f584 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/AccessGp.s @@ -0,0 +1,86 @@ +/// @file +/// IPF specific Global Pointer and Stack Pointer accessing 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. +/// +/// Module Name: AccessGp.s +/// +/// + +//--------------------------------------------------------------------------------- +//++ +// AsmReadGp +// +// This routine is used to read the current value of 64-bit Global Pointer (GP). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current GP value. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadGp, @function +.proc AsmReadGp + +AsmReadGp:: + mov r8 = gp;; + br.ret.dpnt b0;; +.endp AsmReadGp + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteGp +// +// This routine is used to write the current value of 64-bit Global Pointer (GP). +// +// Arguments : +// +// On Entry : The value need to be written. +// +// Return Value: The value have been written. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteGp, @function +.proc AsmWriteGp +.regstk 1, 0, 0, 0 + +AsmWriteGp:: + mov gp = in0 + mov r8 = in0;; + br.ret.dpnt b0;; +.endp AsmWriteGp + +//--------------------------------------------------------------------------------- +//++ +// AsmReadSp +// +// This routine is used to read the current value of 64-bit Stack Pointer (SP). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current SP value. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadSp, @function +.proc AsmReadSp + +AsmReadSp:: + mov r8 = sp;; + br.ret.dpnt b0;; +.endp AsmReadSp diff --git a/MdePkg/Library/BaseLib/Ipf/AccessKr.s b/MdePkg/Library/BaseLib/Ipf/AccessKr.s new file mode 100644 index 0000000000..5a38954292 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/AccessKr.s @@ -0,0 +1,400 @@ +/// @file +/// IPF specific AsmReadKrX() and AsmWriteKrX functions, 'X' is from '0' to '7' +/// +/// Copyright (c) 2006, Intel Corporation +/// All rights reserved. This program and the accompanying materials +/// are licensed and made available under the terms and conditions of the BSD License +/// which accompanies this distribution. The full text of the license may be found at +/// http://opensource.org/licenses/bsd-license.php +/// +/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +/// +/// Module Name: AccessKr.s +/// +/// + +//--------------------------------------------------------------------------------- +//++ +// AsmReadKr0 +// +// This routine is used to get KR0. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value store in KR0. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadKr0, @function +.proc AsmReadKr0 + +AsmReadKr0:: + mov r8 = ar.k0;; + br.ret.dpnt b0;; +.endp AsmReadKr0 + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteKr0 +// +// This routine is used to Write KR0. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value written to the KR0. +// +//-- +//---------------------------------------------------------------------------------- + +.text +.type AsmWriteKr0, @function +.proc AsmWriteKr0 +.regstk 1, 0, 0, 0 + +AsmWriteKr0:: + mov ar.k0 = in0 + mov r8 = in0;; + br.ret.dpnt b0;; +.endp AsmWriteKr0 + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadKr1 +// +// This routine is used to get KR1. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value store in KR1. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadKr1, @function +.proc AsmReadKr1 + +AsmReadKr1:: + mov r8 = ar.k1;; + br.ret.dpnt b0;; +.endp AsmReadKr1 + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteKr1 +// +// This routine is used to Write KR1. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value written to the KR1. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteKr1, @function +.proc AsmWriteKr1 + +AsmWriteKr1:: + mov ar.k1 = in0 + mov r8 = in0;; + br.ret.dpnt b0;; +.endp AsmWriteKr1 + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadKr2 +// +// This routine is used to get KR2. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value store in KR2. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadKr2, @function +.proc AsmReadKr2 + +AsmReadKr2:: + mov r8 = ar.k2;; + br.ret.dpnt b0;; +.endp AsmReadKr2 + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteKr2 +// +// This routine is used to Write KR2. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value written to the KR2. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteKr2, @function +.proc AsmWriteKr2 + +AsmWriteKr2:: + mov ar.k2 = in0 + mov r8 = in0;; + br.ret.dpnt b0;; +.endp AsmWriteKr2 + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadKr3 +// +// This routine is used to get KR3. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value store in KR3. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadKr3, @function +.proc AsmReadKr3 + +AsmReadKr3:: + mov r8 = ar.k3;; + br.ret.dpnt b0;; +.endp AsmReadKr3 + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteKr3 +// +// This routine is used to Write KR3. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value written to the KR3. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteKr3, @function +.proc AsmWriteKr3 + +AsmWriteKr3:: + mov ar.k3 = in0 + mov r8 = in0;; + br.ret.dpnt b0;; +.endp AsmWriteKr3 + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadKr4 +// +// This routine is used to get KR4. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value store in KR4. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadKr4, @function +.proc AsmReadKr4 + +AsmReadKr4:: + mov r8 = ar.k4;; + br.ret.dpnt b0;; +.endp AsmReadKr4 + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteKr4 +// +// This routine is used to Write KR4. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value written to the KR4. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteKr4, @function +.proc AsmWriteKr4 + +AsmWriteKr4:: + mov ar.k4 = in0 + mov r8 = in0;; + br.ret.dpnt b0;; +.endp AsmWriteKr4 + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadKr5 +// +// This routine is used to get KR5. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value store in KR5. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadKr5, @function +.proc AsmReadKr5 + +AsmReadKr5:: + mov r8 = ar.k5;; + br.ret.dpnt b0;; +.endp AsmReadKr5 + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteKr5 +// +// This routine is used to Write KR5. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value written to the KR5. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteKr5, @function +.proc AsmWriteKr5 + +AsmWriteKr5:: + mov ar.k5 = in0 + mov r8 = in0;; + br.ret.dpnt b0;; +.endp AsmWriteKr5 + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadKr6 +// +// This routine is used to get KR6. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value store in KR6. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadKr6, @function +.proc AsmReadKr6 + +AsmReadKr6:: + mov r8 = ar.k6;; + br.ret.dpnt b0;; +.endp AsmReadKr6 + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteKr6 +// +// This routine is used to write KR6. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value written to the KR6. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteKr6, @function +.proc AsmWriteKr6 + +AsmWriteKr6:: + mov ar.k6 = in0 + mov r8 = in0;; + br.ret.dpnt b0;; +.endp AsmWriteKr6 + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadKr7 +// +// This routine is used to get KR7. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value store in KR7. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadKr7, @function +.proc AsmReadKr7 + +AsmReadKr7:: + mov r8 = ar.k7;; + br.ret.dpnt b0;; +.endp AsmReadKr7 + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteKr7 +// +// This routine is used to write KR7. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: The value written to the KR7. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWriteKr7, @function +.proc AsmWriteKr7 + +AsmWriteKr7:: + mov ar.k7 = in0 + mov r8 = in0;; + br.ret.dpnt b0;; +.endp AsmWriteKr7 diff --git a/MdePkg/Library/BaseLib/Ipf/AccessPmr.s b/MdePkg/Library/BaseLib/Ipf/AccessPmr.s new file mode 100644 index 0000000000..cea376c638 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/AccessPmr.s @@ -0,0 +1,124 @@ +/// @file +/// IPF specific Performance Monitor Configuration/Data Registers accessing 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. +/// +/// Module Name: AccessPmr.s +/// +/// + +//--------------------------------------------------------------------------------- +//++ +// AsmReadPmc +// +// This routine is used to Reads the current value of Performance Monitor Configuration Register (PMC). +// +// Arguments : +// +// On Entry : The 8-bit PMC index. +// +// Return Value: The current value of PMC by Index. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadPmc, @function +.proc AsmReadPmc +.regstk 1, 0, 0, 0 + +AsmReadPmc:: + srlz.i;; + srlz.d;; + mov r8 = pmc[in0];; + br.ret.dpnt b0;; +.endp AsmReadPmc + +//--------------------------------------------------------------------------------- +//++ +// AsmWritePmc +// +// This routine is used to write the current value to a Performance Monitor Configuration Register (PMC). +// +// Arguments : +// +// On Entry : The 8-bit PMC index. +// The value should be written to PMC +// +// Return Value: The value written to PMC. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWritePmc, @function +.proc AsmWritePmc +.regstk 2, 0, 0, 0 + +AsmWritePmc:: + mov pmc[in0] = in1 + mov r8 = in1;; + srlz.i;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmWritePmc + + +//--------------------------------------------------------------------------------- +//++ +// AsmReadPmd +// +// This routine is used to Reads the current value of Performance Monitor Data Register (PMD). +// +// Arguments : +// +// On Entry : The 8-bit PMD index. +// +// Return Value: The current value of PMD by Index. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadPmd, @function +.proc AsmReadPmd +.regstk 1, 0, 0, 0 + +AsmReadPmd:: + srlz.i;; + srlz.d;; + mov r8 = pmd[in0];; + br.ret.dpnt b0;; +.endp AsmReadPmd + +//--------------------------------------------------------------------------------- +//++ +// AsmWritePmd +// +// This routine is used to write the current value to Performance Monitor Data Register (PMD). +// +// Arguments : +// +// On Entry : The 8-bit PMD index. +// The value should be written to PMD +// +// Return Value: The value written to PMD. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWritePmd, @function +.proc AsmWritePmd +.regstk 2, 0, 0, 0 + +AsmWritePmd:: + mov pmd[in0] = in1 + mov r8 = in1;; + srlz.i;; + srlz.d;; + br.ret.dpnt b0;; +.endp AsmWritePmd diff --git a/MdePkg/Library/BaseLib/Ipf/AccessPsr.s b/MdePkg/Library/BaseLib/Ipf/AccessPsr.s new file mode 100644 index 0000000000..9b4fe49ff1 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/AccessPsr.s @@ -0,0 +1,110 @@ +/// @file +/// IPF specific Processor Status Register accessing 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. +/// +/// Module Name: AccessPsr.s +/// +/// + +#define CpuModeMask 0x0000001008020000 + +#define CpuInVirtualMode 0x1 +#define CpuInPhysicalMode 0x0 +#define CpuInMixMode (0x0 - 0x1) + +//--------------------------------------------------------------------------------- +//++ +// AsmReadPsr +// +// This routine is used to read the current value of Processor Status Register (PSR). +// +// Arguments : +// +// On Entry : +// +// Return Value: The current PSR value. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadPsr, @function +.proc AsmReadPsr + +AsmReadPsr:: + mov r8 = psr;; + br.ret.dpnt b0;; +.endp AsmReadPsr + +//--------------------------------------------------------------------------------- +//++ +// AsmWritePsr +// +// This routine is used to write the value of Processor Status Register (PSR). +// +// Arguments : +// +// On Entry : The value need to be written. +// +// Return Value: The value have been written. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmWritePsr, @function +.proc AsmWritePsr +.regstk 1, 0, 0, 0 + +AsmWritePsr:: + mov psr.l = in0 + mov r8 = in0;; + srlz.d;; + srlz.i;; + br.ret.dpnt b0;; +.endp AsmWritePsr + +//--------------------------------------------------------------------------------- +//++ +// AsmCpuVirtual +// +// This routine is used to determines if the CPU is currently executing +// in virtual, physical, or mixed mode. +// +// If the CPU is in virtual mode(PSR.RT=1, PSR.DT=1, PSR.IT=1), then 1 is returned. +// If the CPU is in physical mode(PSR.RT=0, PSR.DT=0, PSR.IT=0), then 0 is returned. +// If the CPU is not in physical mode or virtual mode, then it is in mixed mode, +// and -1 is returned. +// +// Arguments: +// +// On Entry: None +// +// Return Value: The CPU mode flag +// return 1 The CPU is in virtual mode. +// return 0 The CPU is in physical mode. +// return -1 The CPU is in mixed mode. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmCpuVirtual, @function +.proc AsmCpuVirtual + +AsmCpuVirtual:: + mov r29 = psr + movl r30 = CpuModeMask;; + and r28 = r30, r29;; + cmp.eq p6, p7 = r30, r28;; +(p6) mov r8 = CpuInVirtualMode;; +(p7) cmp.eq p6, p7 = 0x0, r28;; +(p6) mov r8 = CpuInPhysicalMode;; +(p7) mov r8 = CpuInMixMode;; + br.ret.dpnt b0;; +.endp AsmCpuVirtual \ No newline at end of file diff --git a/MdePkg/Library/BaseLib/Ipf/AsmPalCall.s b/MdePkg/Library/BaseLib/Ipf/AsmPalCall.s new file mode 100644 index 0000000000..9e70a78729 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/AsmPalCall.s @@ -0,0 +1,158 @@ +/// @file +/// Contains an implementation of CallPalProcStacked on Itanium-based +/// architecture. +/// +/// Copyright (c) 2006, Intel Corporation +/// All rights reserved. This program and the accompanying materials +/// are licensed and made available under the terms and conditions of the BSD License +/// which accompanies this distribution. The full text of the license may be found at +/// http://opensource.org/licenses/bsd-license.php +/// +/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +/// +/// Module Name: AsmPalCall.s +/// +/// + + +//----------------------------------------------------------------------------- +//++ +// AsmPalCall +// +// Makes a PAL procedure call. +// This is function to make a PAL procedure call. Based on the Index +// value this API will make static or stacked PAL call. The following table +// describes the usage of PAL Procedure Index Assignment. Architected procedures +// may be designated as required or optional. If a PAL procedure is specified +// as optional, a unique return code of 0xFFFFFFFFFFFFFFFF is returned in the +// Status field of the PAL_CALL_RETURN structure. +// This indicates that the procedure is not present in this PAL implementation. +// It is the caller¡¯s responsibility to check for this return code after calling +// any optional PAL procedure. +// No parameter checking is performed on the 5 input parameters, but there are +// some common rules that the caller should follow when making a PAL call. Any +// address passed to PAL as buffers for return parameters must be 8-byte aligned. +// Unaligned addresses may cause undefined results. For those parameters defined +// as reserved or some fields defined as reserved must be zero filled or the invalid +// argument return value may be returned or undefined result may occur during the +// execution of the procedure. If the PalEntryPoint does not point to a valid +// PAL entry point then the system behavior is undefined. This function is only +// available on IPF. +// +// On Entry : +// in0: PAL_PROC entrypoint +// in1-in4 : PAL_PROC arguments +// +// Return Value: +// +// As per stacked calling conventions. +// +//-- +//--------------------------------------------------------------------------- + +// +// PAL function calls +// +#define PAL_MC_CLEAR_LOG 0x0015 +#define PAL_MC_DYNAMIC_STATE 0x0018 +#define PAL_MC_ERROR_INFO 0x0019 +#define PAL_MC_RESUME 0x001a + + +.text +.proc AsmPalCall +.type AsmPalCall, @function + +AsmPalCall:: + alloc loc1 = ar.pfs,5,8,4,0 + mov loc0 = b0 + mov loc3 = b5 + mov loc4 = r2 + mov loc7 = r1 + mov r2 = psr;; + mov r28 = in1 + mov loc5 = r2;; + + movl loc6 = 0x100;; + cmp.ge p6,p7 = r28,loc6;; + +(p6) movl loc6 = 0x1FF;; +(p7) br.dpnt.few PalCallStatic;; // 0 ~ 255 make a static Pal Call +(p6) cmp.le p6,p7 = r28,loc6;; +(p6) br.dpnt.few PalCallStacked;; // 256 ~ 511 make a stacked Pal Call +(p7) movl loc6 = 0x300;; +(p7) cmp.ge p6,p7 = r28,loc6;; +(p7) br.dpnt.few PalCallStatic;; // 512 ~ 767 make a static Pal Call +(p6) movl loc6 = 0x3FF;; +(p6) cmp.le p6,p7 = r28,loc6;; +(p6) br.dpnt.few PalCallStacked;; // 768 ~ 1023 make a stacked Pal Call + +(p7) mov r8 = 0xFFFFFFFFFFFFFFFF;; // > 1024 return invalid +(p7) br.dpnt.few ComeBackFromPALCall;; + +PalCallStatic: + movl loc6 = PAL_MC_CLEAR_LOG;; + cmp.eq p6,p7 = r28,loc6;; + +(p7) movl loc6 = PAL_MC_DYNAMIC_STATE;; +(p7) cmp.eq p6,p7 = r28,loc6;; + +(p7) movl loc6 = PAL_MC_ERROR_INFO;; +(p7) cmp.eq p6,p7 = r28,loc6;; + +(p7) movl loc6 = PAL_MC_RESUME;; +(p7) cmp.eq p6,p7 = r28,loc6 ;; + + mov loc6 = 0x1;; +(p7) dep r2 = loc6,r2,13,1;; // psr.ic = 1 + +// p6 will be true, if it is one of the MCHK calls. There has been lots of debate +// on psr.ic for these values. For now, do not do any thing to psr.ic + + dep r2 = r0,r2,14,1;; // psr.i = 0 + + mov psr.l = r2 + srlz.d // Needs data serailization. + srlz.i // Needs instruction serailization. + +StaticGetPALLocalIP: + mov loc2 = ip;; + add loc2 = ComeBackFromPALCall - StaticGetPALLocalIP,loc2;; + mov b0 = loc2 // return address after Pal call + + mov r29 = in2 + mov r30 = in3 + mov r31 = in4 + mov b5 = in0;; // get the PalProcEntrypt from input + br.sptk b5;; // Take the plunge. + +PalCallStacked: + dep r2 = r0,r2,14,1;; // psr.i = 0 + mov psr.l = r2;; + srlz.d // Needs data serailization. + srlz.i // Needs instruction serailization. + +StackedGetPALLocalIP: + mov out0 = in1 + mov out1 = in2 + mov out2 = in3 + mov out3 = in4 + mov b5 = in0 ;; // get the PalProcEntrypt from input + br.call.dpnt b0 = b5 ;; // Take the plunge. + +ComeBackFromPALCall: + mov psr.l = loc5 ;; + srlz.d // Needs data serailization. + srlz.i // Needs instruction serailization. + + mov b5 = loc3 + mov r2 = loc4 + mov r1 = loc7 + + mov b0 = loc0 + mov ar.pfs = loc1;; + br.ret.dpnt b0;; + +.endp AsmPalCall + diff --git a/MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c b/MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c new file mode 100644 index 0000000000..3dcbecf29d --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c @@ -0,0 +1,123 @@ +/** @file + Base Library CPU functions for Itanium + + 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. + +**/ + +// +// Include common header file for this module. +// +#include + +//void __mfa (void); + +#pragma intrinsic (_enable) +#pragma intrinsic (_disable) +#pragma intrinsic (__break) +#pragma intrinsic (__mfa) + + +/** + Generates a breakpoint on the CPU. + + Generates a breakpoint on the CPU. The breakpoint must be implemented such + that code can resume normal execution after the breakpoint. + +**/ +VOID +EFIAPI +CpuBreakpoint ( + VOID + ) +{ + __break (0); +} + +/** + Used to serialize load and store operations. + + All loads and stores that proceed calls to this function are guaranteed to be + globally visible when this function returns. + +**/ +VOID +EFIAPI +MemoryFence ( + VOID + ) +{ + __mfa (); +} + +/** + Disables CPU interrupts. + + Disables CPU interrupts. + +**/ +VOID +EFIAPI +DisableInterrupts ( + VOID + ) +{ + _disable (); +} + +/** + Enables CPU interrupts. + + Enables CPU interrupts. + +**/ +VOID +EFIAPI +EnableInterrupts ( + VOID + ) +{ + _enable (); +} + +/** + Enables CPU interrupts for the smallest window required to capture any + pending interrupts. + + Enables CPU interrupts for the smallest window required to capture any + pending interrupts. + +**/ +VOID +EFIAPI +EnableDisableInterrupts ( + VOID + ) +{ + EnableInterrupts (); + DisableInterrupts (); +} + +/** + Places the CPU in a sleep state until an interrupt is received. + + Places the CPU in a sleep state until an interrupt is received. If interrupts + are disabled prior to calling this function, then the CPU will be placed in a + sleep state indefinitely. + +**/ +VOID +EFIAPI +CpuSleep ( + VOID + ) +{ + PalCallStatic (NULL, 29, 0, 0, 0); +} diff --git a/MdePkg/Library/BaseLib/Ipf/CpuFlushTlb.s b/MdePkg/Library/BaseLib/Ipf/CpuFlushTlb.s new file mode 100644 index 0000000000..520c51f6ba --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/CpuFlushTlb.s @@ -0,0 +1,58 @@ +/// @file +/// CpuFlushTlb() function for Itanium-based architecture. +/// +/// Copyright (c) 2006, Intel Corporation +/// All rights reserved. This program and the accompanying materials +/// are licensed and made available under the terms and conditions of the BSD License +/// which accompanies this distribution. The full text of the license may be found at +/// http://opensource.org/licenses/bsd-license.php +/// +/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +/// +/// Module Name: CpuFlushTlb.s +/// +/// + +.auto +.text + +.globl PalCallStatic +.type PalCallStatic, @function + +.proc CpuFlushTlb +.type CpuFlushTlb, @function +CpuFlushTlb:: + alloc loc0 = ar.pfs, 0, 3, 5, 0 + mov out0 = 0 + mov out1 = 6 + mov out2 = 0 + mov out3 = 0 + mov loc1 = b0 + mov out4 = 0 + brl.call.sptk b0 = PalCallStatic + mov loc2 = psr // save PSR + mov ar.pfs = loc0 + extr.u r14 = r10, 32, 32 // r14 <- count1 + rsm 1 << 14 // Disable interrupts + extr.u r15 = r11, 32, 32 // r15 <- stride1 + extr.u r10 = r10, 0, 32 // r10 <- count2 + add r10 = -1, r10 + extr.u r11 = r11, 0, 32 // r11 <- stride2 + br.cond.sptk LoopPredicate +LoopOuter: + mov ar.lc = r10 // LC <- count2 + mov ar.ec = r0 // EC <- 0 +Loop: + ptc.e r9 + add r9 = r11, r9 // r9 += stride2 + br.ctop.sptk Loop + add r9 = r15, r9 // r9 += stride1 +LoopPredicate: + cmp.ne p6 = r0, r14 // count1 == 0? + add r14 = -1, r14 +(p6) br.cond.sptk LoopOuter + mov psr.l = loc2 + mov b0 = loc1 + br.ret.sptk.many b0 +.endp diff --git a/MdePkg/Library/BaseLib/Ipf/CpuPause.s b/MdePkg/Library/BaseLib/Ipf/CpuPause.s new file mode 100644 index 0000000000..f52692f438 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/CpuPause.s @@ -0,0 +1,25 @@ +/// @file +/// CpuPause() function for Itanium-based architecture. +/// +/// Copyright (c) 2006, Intel Corporation +/// All rights reserved. This program and the accompanying materials +/// are licensed and made available under the terms and conditions of the BSD License +/// which accompanies this distribution. The full text of the license may be found at +/// http://opensource.org/licenses/bsd-license.php +/// +/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +/// +/// Module Name: CpuPause.s +/// +/// + +.auto +.text + +.proc CpuPause +.type CpuPause, @function +CpuPause:: + hint @pause + br.ret.sptk.many b0 +.endp diff --git a/MdePkg/Library/BaseLib/Ipf/ExecFc.s b/MdePkg/Library/BaseLib/Ipf/ExecFc.s new file mode 100644 index 0000000000..a5a9e9bc8a --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/ExecFc.s @@ -0,0 +1,66 @@ +/// @file +/// IPF specific AsmFc() and AsmFci () 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. +/// +/// Module Name: ExecFc.s +/// +/// + +//--------------------------------------------------------------------------------- +//++ +// AsmFc +// +// This routine is used to execute a FC instruction on the specific address. +// +// Arguments : +// +// On Entry : The specific address need to execute FC instruction. +// +// Return Value: The specific address have been execute FC instruction. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmFc, @function +.proc AsmFc +.regstk 1, 0, 0, 0 + +AsmFc:: + fc in0 + mov r8 = in0;; + br.ret.dpnt b0;; +.endp AsmFc + + +//--------------------------------------------------------------------------------- +//++ +// AsmFci +// +// This routine is used to execute a FC.i instruction on the specific address. +// +// Arguments : +// +// On Entry : The specific address need to execute FC.i instruction. +// +// Return Value: The specific address have been execute FC.i instruction. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmFci, @function +.proc AsmFci +.regstk 1, 0, 0, 0 + +AsmFci:: + fc.i in0 + mov r8 = in0;; + br.ret.dpnt b0;; +.endp AsmFci \ No newline at end of file diff --git a/MdePkg/Library/BaseLib/Ipf/FlushCacheRange.s b/MdePkg/Library/BaseLib/Ipf/FlushCacheRange.s new file mode 100644 index 0000000000..6e467f0d13 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/FlushCacheRange.s @@ -0,0 +1,96 @@ +//++ +// Copyright (c) 2006, Intel Corporation +// All rights reserved. This program and the accompanying materials +// are licensed and made available under the terms and conditions of the BSD License +// which accompanies this distribution. The full text of the license may be found at +// http://opensource.org/licenses/bsd-license.php +// +// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +// +// Module Name: +// FlushCacheRange.s +// +// Abstract: +// Assemble routine to flush cache lines +// +// Revision History: +// +//-- +.file "IpfCpuCache.s" + +#include "IpfMacro.i" +//#include "IpfDefines.h" + +// +// Invalidates a range of instruction cache lines in the cache coherency domain +// of the calling CPU. +// +// Invalidates the instruction cache lines specified by Address and Length. If +// Address is not aligned on a cache line boundary, then entire instruction +// cache line containing Address is invalidated. If Address + Length is not +// aligned on a cache line boundary, then the entire instruction cache line +// containing Address + Length -1 is invalidated. This function may choose to +// invalidate the entire instruction cache if that is more efficient than +// invalidating the specified range. If Length is 0, the no instruction cache +// lines are invalidated. Address is returned. +// +// If Length is greater than (MAX_ADDRESS - Address + 1), then ASSERT(). +// +// @param Address The base address of the instruction cache lines to +// invalidate. If the CPU is in a physical addressing mode, then +// Address is a physical address. If the CPU is in a virtual +// addressing mode, then Address is a virtual address. +// +// @param Length The number of bytes to invalidate from the instruction cache. +// +// @return Address +// +// VOID * +// EFIAPI +// IpfFlushCacheRange ( +// IN VOID *Address, +// IN UINTN Length +// ); +// +PROCEDURE_ENTRY (IpfFlushCacheRange) + + NESTED_SETUP (5,8,0,0) + + mov loc2 = ar.lc + + mov loc3 = in0 // Start address. + mov loc4 = in1;; // Length in bytes. + + cmp.eq p6,p7 = loc4, r0;; // If Length is zero then don't flush any cache + (p6) br.spnt.many DoneFlushingC;; + + add loc4 = loc4,loc3 + mov loc5 = 1;; + sub loc4 = loc4, loc5 ;; // the End address to flush + + dep loc3 = r0,loc3,0,5 + dep loc4 = r0,loc4,0,5;; + shr loc3 = loc3,5 + shr loc4 = loc4,5;; // 32 byte cache line + + sub loc4 = loc4,loc3;; // total flush count, It should be add 1 but + // the br.cloop will first execute one time + mov loc3 = in0 + mov loc5 = 32 + mov ar.lc = loc4;; + +StillFlushingC: + fc loc3;; + sync.i;; + srlz.i;; + add loc3 = loc5,loc3;; + br.cloop.sptk.few StillFlushingC;; + +DoneFlushingC: + mov ar.lc = loc2 + mov r8 = in0 // return *Address + NESTED_RETURN + +PROCEDURE_EXIT (IpfFlushCacheRange) + diff --git a/MdePkg/Library/BaseLib/Ipf/GetInterruptState.s b/MdePkg/Library/BaseLib/Ipf/GetInterruptState.s new file mode 100644 index 0000000000..d5b5fc852f --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/GetInterruptState.s @@ -0,0 +1,27 @@ +/// @file +/// Retrieve of the interrupt state of the running processor for the Itanium +/// architecture. +/// +/// Copyright (c) 2006, Intel Corporation +/// All rights reserved. This program and the accompanying materials +/// are licensed and made available under the terms and conditions of the BSD License +/// which accompanies this distribution. The full text of the license may be found at +/// http://opensource.org/licenses/bsd-license.php +/// +/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +/// +/// Module Name: GetInterruptState.s +/// +/// + +.auto +.text + +.proc GetInterruptState +.type GetInterruptState, @function +GetInterruptState:: + mov r8 = psr + extr.u r8 = r8, 14, 1 + br.ret.sptk.many b0 +.endp GetInterruptState diff --git a/MdePkg/Library/BaseLib/Ipf/InterlockedCompareExchange32.s b/MdePkg/Library/BaseLib/Ipf/InterlockedCompareExchange32.s new file mode 100644 index 0000000000..3a278d7268 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/InterlockedCompareExchange32.s @@ -0,0 +1,29 @@ +/// @file +/// Contains an implementation of InterlockedCompareExchange32 on Itanium- +/// based architecture. +/// +/// Copyright (c) 2006, Intel Corporation +/// All rights reserved. This program and the accompanying materials +/// are licensed and made available under the terms and conditions of the BSD License +/// which accompanies this distribution. The full text of the license may be found at +/// http://opensource.org/licenses/bsd-license.php +/// +/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +/// +/// Module Name: InterlockedCompareExchange32.s +/// +/// + +.auto +.text + +.proc InternalSyncCompareExchange32 +.type InternalSyncCompareExchange32, @function +InternalSyncCompareExchange32:: + zxt4 r33 = r33 + mov ar.ccv = r33 + cmpxchg4.rel r8 = [r32], r34 + mf + br.ret.sptk.many b0 +.endp InternalSyncCompareExchange32 \ No newline at end of file diff --git a/MdePkg/Library/BaseLib/Ipf/InterlockedCompareExchange64.s b/MdePkg/Library/BaseLib/Ipf/InterlockedCompareExchange64.s new file mode 100644 index 0000000000..88b9d2b490 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/InterlockedCompareExchange64.s @@ -0,0 +1,28 @@ +/// @file +/// Contains an implementation of InterlockedCompareExchange64 on Itanium- +/// based architecture. +/// +/// Copyright (c) 2006, Intel Corporation +/// All rights reserved. This program and the accompanying materials +/// are licensed and made available under the terms and conditions of the BSD License +/// which accompanies this distribution. The full text of the license may be found at +/// http://opensource.org/licenses/bsd-license.php +/// +/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +/// +/// Module Name: InterlockedCompareExchange64.s +/// +/// + +.auto +.text + +.proc InternalSyncCompareExchange64 +.type InternalSyncCompareExchange64, @function +InternalSyncCompareExchange64:: + mov ar.ccv = r33 + cmpxchg8.rel r8 = [r32], r34 + mf + br.ret.sptk.many b0 +.endp InternalSyncCompareExchange64 \ No newline at end of file diff --git a/MdePkg/Library/BaseLib/Ipf/InternalSwitchStack.c b/MdePkg/Library/BaseLib/Ipf/InternalSwitchStack.c new file mode 100644 index 0000000000..60d0a37562 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/InternalSwitchStack.c @@ -0,0 +1,68 @@ +/** @file + SwitchStack() function for IPF. + + Copyright (c) 2007, Intel Corporation
+ All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + Module Name: InternalSwitchStack.c + +**/ + +#include + +/** + Transfers control to a function starting with a new stack. + + Transfers control to the function specified by EntryPoint using the + new stack specified by NewStack and passing in the parameters specified + by Context1 and Context2. Context1 and Context2 are optional and may + be NULL. The function EntryPoint must never return. + Marker will be ignored on IA-32, x64, and EBC. + IPF CPUs expect one additional parameter of type VOID * that specifies + the new backing store pointer. + + If EntryPoint is NULL, then ASSERT(). + If NewStack is NULL, then ASSERT(). + + @param EntryPoint A pointer to function to call with the new stack. + @param Context1 A pointer to the context to pass into the EntryPoint + function. + @param Context2 A pointer to the context to pass into the EntryPoint + function. + @param NewStack A pointer to the new stack to use for the EntryPoint + function. + @param Marker VA_LIST marker for the variable argument list. + +**/ +VOID +EFIAPI +InternalSwitchStack ( + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1, OPTIONAL + IN VOID *Context2, OPTIONAL + IN VOID *NewStack, + IN VA_LIST Marker + ) + +{ + VOID *NewBsp; + + // + // Get new backing store pointer from variable list + // + NewBsp = VA_ARG (Marker, VOID *); + + // + // Stack should be aligned with CPU_STACK_ALIGNMENT + // + ASSERT (((UINTN)NewStack & (CPU_STACK_ALIGNMENT - 1)) == 0); + ASSERT (((UINTN)NewBsp & (CPU_STACK_ALIGNMENT - 1)) == 0); + + AsmSwitchStackAndBackingStore (EntryPoint, Context1, Context2, NewStack, NewBsp); +} diff --git a/MdePkg/Library/BaseLib/Ipf/PalCallStatic.s b/MdePkg/Library/BaseLib/Ipf/PalCallStatic.s new file mode 100644 index 0000000000..c21d7427f9 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/PalCallStatic.s @@ -0,0 +1,48 @@ +/// @file +/// Contains an implementation of CallPalProcStatic on Itanium-based +/// architecture. +/// +/// Copyright (c) 2006, Intel Corporation +/// All rights reserved. This program and the accompanying materials +/// are licensed and made available under the terms and conditions of the BSD License +/// which accompanies this distribution. The full text of the license may be found at +/// http://opensource.org/licenses/bsd-license.php +/// +/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +/// +/// Module Name: PalCallStatic.s +/// +/// + +.auto +.text + +.proc PalCallStatic +.type PalCallStatic, @function +.regstk 5, 0, 0, 0 +PalCallStatic:: + cmp.eq p15 = in0, r0 + mov r31 = in4 + mov r8 = ip + +(p15) mov in0 = ar.k5 + add r8 = (_PalProcReturn - PalCallStatic), r8 + mov r30 = in3 + + mov in4 = psr + mov in3 = b0 + mov b7 = in0 + + rsm 1 << 14 // Disable interrupts + mov r29 = in2 + mov r28 = in1 + + mov b0 = r8 + br.cond.sptk.many b7 + +_PalProcReturn: + mov psr.l = in4 + mov b0 = in3 + br.ret.sptk.many b0 +.endp PalCallStatic diff --git a/MdePkg/Library/BaseLib/Ipf/ReadCpuid.s b/MdePkg/Library/BaseLib/Ipf/ReadCpuid.s new file mode 100644 index 0000000000..2176dad116 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/ReadCpuid.s @@ -0,0 +1,40 @@ +/// @file +/// IPF specific AsmReadCpuid()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. +/// +/// Module Name: ReadCpuid.s +/// +/// + +//--------------------------------------------------------------------------------- +//++ +// AsmReadCpuid +// +// This routine is used to Reads the current value of Processor Identifier Register (CPUID). +// +// Arguments : +// +// On Entry : The 8-bit Processor Identifier Register index to read. +// +// Return Value: The current value of Processor Identifier Register specified by Index. +// +//-- +//---------------------------------------------------------------------------------- +.text +.type AsmReadCpuid, @function +.proc AsmReadCpuid +.regstk 1, 0, 0, 0 + +AsmReadCpuid:: + mov r8 = cpuid[in0];; + br.ret.dpnt b0;; +.endp AsmReadCpuid + diff --git a/MdePkg/Library/BaseLib/Ipf/SwitchStack.s b/MdePkg/Library/BaseLib/Ipf/SwitchStack.s new file mode 100644 index 0000000000..a3c524f119 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/SwitchStack.s @@ -0,0 +1,50 @@ +/// @file +/// IPF specific SwitchStack() 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. +/// +/// Module Name: SwitchStack.s +/// +/// + +.auto +.text + +.proc AsmSwitchStackAndBackingStore +.type AsmSwitchStackAndBackingStore, @function +.regstk 5, 0, 0, 0 +AsmSwitchStackAndBackingStore:: + mov r14 = ar.rsc + movl r2 = ~((((1 << 14) - 1) << 16) | 3) + + mov r17 = in1 + mov r18 = in2 + and r2 = r14, r2 + + mov ar.rsc = r2 + mov sp = in3 + mov r19 = in4 + + ld8.nt1 r16 = [in0], 8 + ld8.nta gp = [in0] + mov r3 = -1 + + loadrs + mov ar.bspstore = r19 + mov b7 = r16 + + alloc r2 = ar.pfs, 0, 0, 2, 0 + mov out0 = r17 + mov out1 = r18 + + mov ar.rnat = r3 + mov ar.rsc = r14 + br.call.sptk.many b0 = b7 +.endp AsmSwitchStackAndBackingStore diff --git a/MdePkg/Library/BaseLib/Ipf/Synchronization.c b/MdePkg/Library/BaseLib/Ipf/Synchronization.c new file mode 100644 index 0000000000..c29a8763d3 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/Synchronization.c @@ -0,0 +1,79 @@ +/** @file + Implementation of synchronization functions on Itanium. + + Copyright (c) 2006, Intel Corporation
+ All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + Module Name: Synchronization.c + +**/ + +#include "BaseLibInternals.h" + +/** + Performs an atomic increment of an 32-bit unsigned integer. + + Performs an atomic increment of the 32-bit unsigned integer specified by + Value and returns the incremented value. The increment operation must be + performed using MP safe mechanisms. The state of the return value is not + guaranteed to be MP safe. + + @param Value A pointer to the 32-bit value to increment. + + @return The incremented value. + +**/ +UINT32 +EFIAPI +InternalSyncIncrement ( + IN volatile UINT32 *Value + ) +{ + UINT32 OriginalValue; + + do { + OriginalValue = *Value; + } while (OriginalValue != InternalSyncCompareExchange32 ( + Value, + OriginalValue, + OriginalValue + 1 + )); + return OriginalValue + 1; +} + +/** + Performs an atomic decrement of an 32-bit unsigned integer. + + Performs an atomic decrement of the 32-bit unsigned integer specified by + Value and returns the decrement value. The decrement operation must be + performed using MP safe mechanisms. The state of the return value is not + guaranteed to be MP safe. + + @param Value A pointer to the 32-bit value to decrement. + + @return The decrement value. + +**/ +UINT32 +EFIAPI +InternalSyncDecrement ( + IN volatile UINT32 *Value + ) +{ + UINT32 OriginalValue; + + do { + OriginalValue = *Value; + } while (OriginalValue != InternalSyncCompareExchange32 ( + Value, + OriginalValue, + OriginalValue - 1 + )); + return OriginalValue - 1; +} diff --git a/MdePkg/Library/BaseLib/Ipf/Unaligned.c b/MdePkg/Library/BaseLib/Ipf/Unaligned.c new file mode 100644 index 0000000000..1c4a937ab9 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/Unaligned.c @@ -0,0 +1,248 @@ +/** @file + Unaligned access functions of BaseLib for IPF. + + Copyright (c) 2006, Intel Corporation
+ All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + Module Name: Unaligned.c + +**/ + +// +// Include common header file for this module. +// +#include + +/** + Reads a 16-bit value from memory that may be unaligned. + + This function returns the 16-bit value pointed to by Buffer. The function + guarantees that the read operation does not produce an alignment fault. + + If the Buffer is NULL, then ASSERT(). + + @param Buffer Pointer to a 16-bit value that may be unaligned. + + @return *Uint16 + +**/ +UINT16 +EFIAPI +ReadUnaligned16 ( + IN CONST UINT16 *Buffer + ) +{ + ASSERT (Buffer != NULL); + + return (UINT16)(((UINT8*)Buffer)[0] | (((UINT8*)Buffer)[1] << 8)); +} + +/** + Writes a 16-bit value to memory that may be unaligned. + + This function writes the 16-bit value specified by Value to Buffer. Value is + returned. The function guarantees that the write operation does not produce + an alignment fault. + + If the Buffer is NULL, then ASSERT(). + + @param Buffer Pointer to a 16-bit value that may be unaligned. + @param Value 16-bit value to write to Buffer. + + @return Value + +**/ +UINT16 +EFIAPI +WriteUnaligned16 ( + OUT UINT16 *Buffer, + IN UINT16 Value + ) +{ + ASSERT (Buffer != NULL); + + ((UINT8*)Buffer)[0] = (UINT8)Value; + ((UINT8*)Buffer)[1] = (UINT8)(Value >> 8); + + return Value; +} + +/** + Reads a 24-bit value from memory that may be unaligned. + + This function returns the 24-bit value pointed to by Buffer. The function + guarantees that the read operation does not produce an alignment fault. + + If the Buffer is NULL, then ASSERT(). + + @param Buffer Pointer to a 24-bit value that may be unaligned. + + @return The value read. + +**/ +UINT32 +EFIAPI +ReadUnaligned24 ( + IN CONST UINT32 *Buffer + ) +{ + ASSERT (Buffer != NULL); + + return (UINT32)( + ReadUnaligned16 ((UINT16*)Buffer) | + (((UINT8*)Buffer)[2] << 16) + ); +} + +/** + Writes a 24-bit value to memory that may be unaligned. + + This function writes the 24-bit value specified by Value to Buffer. Value is + returned. The function guarantees that the write operation does not produce + an alignment fault. + + If the Buffer is NULL, then ASSERT(). + + @param Buffer Pointer to a 24-bit value that may be unaligned. + @param Value 24-bit value to write to Buffer. + + @return The value written. + +**/ +UINT32 +EFIAPI +WriteUnaligned24 ( + OUT UINT32 *Buffer, + IN UINT32 Value + ) +{ + ASSERT (Buffer != NULL); + + WriteUnaligned16 ((UINT16*)Buffer, (UINT16)Value); + *(UINT8*)((UINT16*)Buffer + 1) = (UINT8)(Value >> 16); + return Value; +} + +/** + Reads a 32-bit value from memory that may be unaligned. + + This function returns the 32-bit value pointed to by Buffer. The function + guarantees that the read operation does not produce an alignment fault. + + If the Buffer is NULL, then ASSERT(). + + @param Buffer Pointer to a 32-bit value that may be unaligned. + + @return *Uint32 + +**/ +UINT32 +EFIAPI +ReadUnaligned32 ( + IN CONST UINT32 *Buffer + ) +{ + UINT16 LowerBytes; + UINT16 HigherBytes; + + ASSERT (Buffer != NULL); + + LowerBytes = ReadUnaligned16 ((UINT16*) Buffer); + HigherBytes = ReadUnaligned16 ((UINT16*) Buffer + 1); + + return (UINT32) (LowerBytes | (HigherBytes << 16)); +} + +/** + Writes a 32-bit value to memory that may be unaligned. + + This function writes the 32-bit value specified by Value to Buffer. Value is + returned. The function guarantees that the write operation does not produce + an alignment fault. + + If the Buffer is NULL, then ASSERT(). + + @param Buffer Pointer to a 32-bit value that may be unaligned. + @param Value 32-bit value to write to Buffer. + + @return Value + +**/ +UINT32 +EFIAPI +WriteUnaligned32 ( + OUT UINT32 *Buffer, + IN UINT32 Value + ) +{ + ASSERT (Buffer != NULL); + + WriteUnaligned16 ((UINT16*)Buffer, (UINT16)Value); + WriteUnaligned16 ((UINT16*)Buffer + 1, (UINT16)(Value >> 16)); + return Value; +} + +/** + Reads a 64-bit value from memory that may be unaligned. + + This function returns the 64-bit value pointed to by Buffer. The function + guarantees that the read operation does not produce an alignment fault. + + If the Buffer is NULL, then ASSERT(). + + @param Buffer Pointer to a 64-bit value that may be unaligned. + + @return *Uint64 + +**/ +UINT64 +EFIAPI +ReadUnaligned64 ( + IN CONST UINT64 *Buffer + ) +{ + UINT32 LowerBytes; + UINT32 HigherBytes; + + ASSERT (Buffer != NULL); + + LowerBytes = ReadUnaligned32 ((UINT32*) Buffer); + HigherBytes = ReadUnaligned32 ((UINT32*) Buffer + 1); + + return (UINT64) (LowerBytes | LShiftU64 (HigherBytes, 32)); +} + +/** + Writes a 64-bit value to memory that may be unaligned. + + This function writes the 64-bit value specified by Value to Buffer. Value is + returned. The function guarantees that the write operation does not produce + an alignment fault. + + If the Buffer is NULL, then ASSERT(). + + @param Buffer Pointer to a 64-bit value that may be unaligned. + @param Value 64-bit value to write to Buffer. + + @return Value + +**/ +UINT64 +EFIAPI +WriteUnaligned64 ( + OUT UINT64 *Buffer, + IN UINT64 Value + ) +{ + ASSERT (Buffer != NULL); + + WriteUnaligned32 ((UINT32*)Buffer, (UINT32)Value); + WriteUnaligned32 ((UINT32*)Buffer + 1, (UINT32)RShiftU64 (Value, 32)); + return Value; +} diff --git a/MdePkg/Library/BaseLib/Ipf/asm.h b/MdePkg/Library/BaseLib/Ipf/asm.h new file mode 100644 index 0000000000..8ef0b30626 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/asm.h @@ -0,0 +1,27 @@ +/// @file +/// This module contains generic macros for an assembly writer. +/// +/// Copyright (c) 2006, Intel Corporation
+/// All rights reserved. This program and the accompanying materials +/// are licensed and made available under the terms and conditions of the BSD License +/// which accompanies this distribution. The full text of the license may be found at +/// http://opensource.org/licenses/bsd-license.php +/// +/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +/// +/// Module Name: asm.h +/// +#ifndef _ASM_H +#define _ASM_H + +#define TRUE 1 +#define FALSE 0 +#define PROCEDURE_ENTRY(name) .##text; \ + .##type name, @function; \ + .##proc name; \ + name:: + +#define PROCEDURE_EXIT(name) .##endp name + +#endif // _ASM_H diff --git a/MdePkg/Library/BaseLib/Ipf/ia_64gen.h b/MdePkg/Library/BaseLib/Ipf/ia_64gen.h new file mode 100644 index 0000000000..081cc4a8f6 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/ia_64gen.h @@ -0,0 +1,205 @@ +/// @file +/// +/// +/// Copyright (c) 2006, Intel Corporation
+/// All rights reserved. This program and the accompanying materials +/// are licensed and made available under the terms and conditions of the BSD License +/// which accompanies this distribution. The full text of the license may be found at +/// http://opensource.org/licenses/bsd-license.php +/// +/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +/// +/// Module Name: ia_64gen.h +/// +#ifndef _IA64GEN_H +#define _IA64GEN_H + +#define TT_UNAT 0 +#define C_PSR 0 +#define J_UNAT 0 +#define T_TYPE 0 +#define T_IPSR 0x8 +#define T_ISR 0x10 +#define T_IIP 0x18 +#define T_IFA 0x20 +#define T_IIPA 0x28 +#define T_IFS 0x30 +#define T_IIM 0x38 +#define T_RSC 0x40 +#define T_BSP 0x48 +#define T_BSPSTORE 0x50 +#define T_RNAT 0x58 +#define T_PFS 0x60 +#define T_KBSPSTORE 0x68 +#define T_UNAT 0x70 +#define T_CCV 0x78 +#define T_DCR 0x80 +#define T_PREDS 0x88 +#define T_NATS 0x90 +#define T_R1 0x98 +#define T_GP 0x98 +#define T_R2 0xa0 +#define T_R3 0xa8 +#define T_R4 0xb0 +#define T_R5 0xb8 +#define T_R6 0xc0 +#define T_R7 0xc8 +#define T_R8 0xd0 +#define T_R9 0xd8 +#define T_R10 0xe0 +#define T_R11 0xe8 +#define T_R12 0xf0 +#define T_SP 0xf0 +#define T_R13 0xf8 +#define T_R14 0x100 +#define T_R15 0x108 +#define T_R16 0x110 +#define T_R17 0x118 +#define T_R18 0x120 +#define T_R19 0x128 +#define T_R20 0x130 +#define T_R21 0x138 +#define T_R22 0x140 +#define T_R23 0x148 +#define T_R24 0x150 +#define T_R25 0x158 +#define T_R26 0x160 +#define T_R27 0x168 +#define T_R28 0x170 +#define T_R29 0x178 +#define T_R30 0x180 +#define T_R31 0x188 +#define T_F2 0x1f0 +#define T_F3 0x200 +#define T_F4 0x210 +#define T_F5 0x220 +#define T_F6 0x230 +#define T_F7 0x240 +#define T_F8 0x250 +#define T_F9 0x260 +#define T_F10 0x270 +#define T_F11 0x280 +#define T_F12 0x290 +#define T_F13 0x2a0 +#define T_F14 0x2b0 +#define T_F15 0x2c0 +#define T_F16 0x2d0 +#define T_F17 0x2e0 +#define T_F18 0x2f0 +#define T_F19 0x300 +#define T_F20 0x310 +#define T_F21 0x320 +#define T_F22 0x330 +#define T_F23 0x340 +#define T_F24 0x350 +#define T_F25 0x360 +#define T_F26 0x370 +#define T_F27 0x380 +#define T_F28 0x390 +#define T_F29 0x3a0 +#define T_F30 0x3b0 +#define T_F31 0x3c0 +#define T_FPSR 0x1e0 +#define T_B0 0x190 +#define T_B1 0x198 +#define T_B2 0x1a0 +#define T_B3 0x1a8 +#define T_B4 0x1b0 +#define T_B5 0x1b8 +#define T_B6 0x1c0 +#define T_B7 0x1c8 +#define T_EC 0x1d0 +#define T_LC 0x1d8 +#define J_NATS 0x8 +#define J_PFS 0x10 +#define J_BSP 0x18 +#define J_RNAT 0x20 +#define J_PREDS 0x28 +#define J_LC 0x30 +#define J_R4 0x38 +#define J_R5 0x40 +#define J_R6 0x48 +#define J_R7 0x50 +#define J_SP 0x58 +#define J_F2 0x60 +#define J_F3 0x70 +#define J_F4 0x80 +#define J_F5 0x90 +#define J_F16 0xa0 +#define J_F17 0xb0 +#define J_F18 0xc0 +#define J_F19 0xd0 +#define J_F20 0xe0 +#define J_F21 0xf0 +#define J_F22 0x100 +#define J_F23 0x110 +#define J_F24 0x120 +#define J_F25 0x130 +#define J_F26 0x140 +#define J_F27 0x150 +#define J_F28 0x160 +#define J_F29 0x170 +#define J_F30 0x180 +#define J_F31 0x190 +#define J_FPSR 0x1a0 +#define J_B0 0x1a8 +#define J_B1 0x1b0 +#define J_B2 0x1b8 +#define J_B3 0x1c0 +#define J_B4 0x1c8 +#define J_B5 0x1d0 +#define TRAP_FRAME_LENGTH 0x3d0 +#define C_UNAT 0x28 +#define C_NATS 0x30 +#define C_PFS 0x8 +#define C_BSPSTORE 0x10 +#define C_RNAT 0x18 +#define C_RSC 0x20 +#define C_PREDS 0x38 +#define C_LC 0x40 +#define C_DCR 0x48 +#define C_R1 0x50 +#define C_GP 0x50 +#define C_R4 0x58 +#define C_R5 0x60 +#define C_R6 0x68 +#define C_R7 0x70 +#define C_SP 0x78 +#define C_R13 0x80 +#define C_F2 0x90 +#define C_F3 0xa0 +#define C_F4 0xb0 +#define C_F5 0xc0 +#define C_F16 0xd0 +#define C_F17 0xe0 +#define C_F18 0xf0 +#define C_F19 0x100 +#define C_F20 0x110 +#define C_F21 0x120 +#define C_F22 0x130 +#define C_F23 0x140 +#define C_F24 0x150 +#define C_F25 0x160 +#define C_F26 0x170 +#define C_F27 0x180 +#define C_F28 0x190 +#define C_F29 0x1a0 +#define C_F30 0x1b0 +#define C_F31 0x1c0 +#define C_FPSR 0x1d0 +#define C_B0 0x1d8 +#define C_B1 0x1e0 +#define C_B2 0x1e8 +#define C_B3 0x1f0 +#define C_B4 0x1f8 +#define C_B5 0x200 +#define TT_R2 0x8 +#define TT_R3 0x10 +#define TT_R8 0x18 +#define TT_R9 0x20 +#define TT_R10 0x28 +#define TT_R11 0x30 +#define TT_R14 0x38 + +#endif _IA64GEN_H diff --git a/MdePkg/Library/BaseLib/Ipf/longjmp.s b/MdePkg/Library/BaseLib/Ipf/longjmp.s new file mode 100644 index 0000000000..20a0df10f7 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/longjmp.s @@ -0,0 +1,121 @@ +/// @file +/// Contains an implementation of longjmp for the Itanium-based architecture. +/// +/// Copyright (c) 2006, Intel Corporation +/// All rights reserved. This program and the accompanying materials +/// are licensed and made available under the terms and conditions of the BSD License +/// which accompanies this distribution. The full text of the license may be found at +/// http://opensource.org/licenses/bsd-license.php +/// +/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +/// +/// Module Name: longjmp.s +/// +/// + +.auto +.text + +.proc InternalLongJump +.type InternalLongJump, @function +.regstk 2, 0, 0, 0 +InternalLongJump:: + add r10 = 0x10*20 + 8*14, in0 + movl r2 = ~((((1 << 14) - 1) << 16) | 3) + + ld8.nt1 r14 = [r10], -8*2 // BSP, skip PFS + mov r15 = ar.bspstore // BSPSTORE + + ld8.nt1 r17 = [r10], -8 // UNAT after spill + mov r16 = ar.rsc // RSC + cmp.leu p6 = r14, r15 + + ld8.nt1 r18 = [r10], -8 // UNAT + ld8.nt1 r25 = [r10], -8 // b5 + and r2 = r16, r2 + + ldf.fill.nt1 f2 = [in0], 0x10 + ld8.nt1 r24 = [r10], -8 // b4 + mov b5 = r25 + + mov ar.rsc = r2 + ld8.nt1 r23 = [r10], -8 // b3 + mov b4 = r24 + + ldf.fill.nt1 f3 = [in0], 0x10 + mov ar.unat = r17 +(p6) br.spnt.many _skip_flushrs + + flushrs + mov r15 = ar.bsp // New BSPSTORE + +_skip_flushrs: + mov r31 = ar.rnat // RNAT + loadrs + + ldf.fill.nt1 f4 = [in0], 0x10 + ld8.nt1 r22 = [r10], -8 + dep r2 = -1, r14, 3, 6 + + ldf.fill.nt1 f5 = [in0], 0x10 + ld8.nt1 r21 = [r10], -8 + cmp.ltu p6 = r2, r15 + + ld8.nt1 r20 = [r10], -0x10 // skip sp +(p6) ld8.nta r31 = [r2] + mov b3 = r23 + + ldf.fill.nt1 f16 = [in0], 0x10 + ld8.fill.nt1 r7 = [r10], -8 + mov b2 = r22 + + ldf.fill.nt1 f17 = [in0], 0x10 + ld8.fill.nt1 r6 = [r10], -8 + mov b1 = r21 + + ldf.fill.nt1 f18 = [in0], 0x10 + ld8.fill.nt1 r5 = [r10], -8 + mov b0 = r20 + + ldf.fill.nt1 f19 = [in0], 0x10 + ld8.fill.nt1 r4 = [r10], 8*13 + + ldf.fill.nt1 f20 = [in0], 0x10 + ld8.nt1 r19 = [r10], 0x10 // PFS + + ldf.fill.nt1 f21 = [in0], 0x10 + ld8.nt1 r26 = [r10], 8 // Predicate + mov ar.pfs = r19 + + ldf.fill.nt1 f22 = [in0], 0x10 + ld8.nt1 r27 = [r10], 8 // LC + mov pr = r26, -1 + + ldf.fill.nt1 f23 = [in0], 0x10 + ld8.nt1 r28 = [r10], -17*8 - 0x10 + mov ar.lc = r27 + + ldf.fill.nt1 f24 = [in0], 0x10 + ldf.fill.nt1 f25 = [in0], 0x10 + mov r8 = in1 + + ldf.fill.nt1 f26 = [in0], 0x10 + ldf.fill.nt1 f31 = [r10], -0x10 + + ldf.fill.nt1 f27 = [in0], 0x10 + ldf.fill.nt1 f30 = [r10], -0x10 + + ldf.fill.nt1 f28 = [in0] + ldf.fill.nt1 f29 = [r10], 0x10*3 + 8*4 + + ld8.fill.nt1 sp = [r10] + mov ar.unat = r18 + + mov ar.bspstore = r14 + mov ar.rnat = r31 + + invala + mov ar.rsc = r16 + br.ret.sptk b0 +.endp diff --git a/MdePkg/Library/BaseLib/Ipf/setjmp.s b/MdePkg/Library/BaseLib/Ipf/setjmp.s new file mode 100644 index 0000000000..e2b346ee72 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ipf/setjmp.s @@ -0,0 +1,108 @@ +/// @file +/// Contains an implementation of longjmp for the Itanium-based architecture. +/// +/// Copyright (c) 2006, Intel Corporation +/// All rights reserved. This program and the accompanying materials +/// are licensed and made available under the terms and conditions of the BSD License +/// which accompanies this distribution. The full text of the license may be found at +/// http://opensource.org/licenses/bsd-license.php +/// +/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +/// +/// Module Name: longjmp.s +/// +/// + +.auto +.text + +.globl InternalAssertJumpBuffer +.type InternalAssertJumpBuffer, @function + +.proc SetJump +.type SetJump, @function +SetJump:: + alloc loc0 = ar.pfs, 1, 2, 1, 0 + mov loc1 = b0 + mov out0 = in0 + + brl.call.sptk.many b0 = InternalAssertJumpBuffer + + mov r14 = ar.unat + mov r15 = ar.bsp + add r10 = 0x10*20, in0 + + stf.spill.nta [in0] = f2, 0x10 + st8.spill.nta [r10] = r4, 8 + mov r21 = b1 + + stf.spill.nta [in0] = f3, 0x10 + st8.spill.nta [r10] = r5, 8 + mov r22 = b2 + + stf.spill.nta [in0] = f4, 0x10 + st8.spill.nta [r10] = r6, 8 + mov r23 = b3 + + stf.spill.nta [in0] = f5, 0x10 + st8.spill.nta [r10] = r7, 8 + mov r24 = b4 + + stf.spill.nta [in0] = f16, 0x10 + st8.spill.nta [r10] = sp, 8 + mov r25 = b5 + + stf.spill.nta [in0] = f17, 0x10 + st8.nta [r10] = loc1, 8 + mov r16 = pr + + stf.spill.nta [in0] = f18, 0x10 + st8.nta [r10] = r21, 8 + mov r17 = ar.lc + + stf.spill.nta [in0] = f19, 0x10 + st8.nta [r10] = r22, 8 + + stf.spill.nta [in0] = f20, 0x10 + st8.nta [r10] = r23, 8 + + stf.spill.nta [in0] = f21, 0x10 + st8.nta [r10] = r24, 8 + + stf.spill.nta [in0] = f22, 0x10 + st8.nta [r10] = r25, 8 + + stf.spill.nta [in0] = f23, 0x10 + mov r18 = ar.unat + + stf.spill.nta [in0] = f24, 0x10 + st8.nta [r10] = r14, 8 // UNAT + + stf.spill.nta [in0] = f25, 0x10 + st8.nta [r10] = r18, 8 // UNAT after spill + + stf.spill.nta [in0] = f26, 0x10 + st8.nta [r10] = loc0, 8 // PFS + + stf.spill.nta [in0] = f27, 0x10 + st8.nta [r10] = r15, 8 // BSP + mov r8 = 0 + + stf.spill.nta [in0] = f28, 0x10 + mov r19 = ar.fpsr + + stf.spill.nta [in0] = f29, 0x10 + st8.nta [r10] = r16, 8 // PR + mov ar.pfs = loc0 + + stf.spill.nta [in0] = f30, 0x10 + st8.nta [r10] = r17, 8 // LC + mov b0 = loc1 + + stf.spill.nta [in0] = f31, 0x10 + st8.nta [r10] = r19 // FPSR + + mov ar.unat = r14 + br.ret.sptk b0 +.endp SetJump diff --git a/MdePkg/Library/BaseLib/X64/CpuBreakpoint.S b/MdePkg/Library/BaseLib/X64/CpuBreakpoint.S new file mode 100644 index 0000000000..710006bdd1 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/CpuBreakpoint.S @@ -0,0 +1,25 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# CpuBreakpoint.S +# +# Abstract: +# +# Implementation of CpuBreakpoint() on x86_64 +# +#------------------------------------------------------------------------------ + +.global _CpuBreakpoint +_CpuBreakpoint: + int $0x3 + ret diff --git a/MdePkg/Library/BaseLib/X64/CpuBreakpoint.asm b/MdePkg/Library/BaseLib/X64/CpuBreakpoint.asm new file mode 100644 index 0000000000..f1ebe47b21 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/CpuBreakpoint.asm @@ -0,0 +1,37 @@ +;------------------------------------------------------------------------------ ; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; CpuBreakpoint.Asm +; +; Abstract: +; +; CpuBreakpoint function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; CpuBreakpoint ( +; VOID +; ); +;------------------------------------------------------------------------------ +CpuBreakpoint PROC + int 3 + ret +CpuBreakpoint ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/CpuBreakpoint.c b/MdePkg/Library/BaseLib/X64/CpuBreakpoint.c new file mode 100644 index 0000000000..01939e9128 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/CpuBreakpoint.c @@ -0,0 +1,31 @@ +/** @file + CpuBreakpoint function. + + Copyright (c) 2006 - 2007, 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. + +**/ + + +// +// Microsoft Visual Studio 7.1 Function Prototypes for I/O Intrinsics +// +void __debugbreak (); + +#pragma intrinsic(__debugbreak) + +VOID +EFIAPI +CpuBreakpoint ( + VOID + ) +{ + __debugbreak (); +} + diff --git a/MdePkg/Library/BaseLib/X64/CpuFlushTlb.S b/MdePkg/Library/BaseLib/X64/CpuFlushTlb.S new file mode 100644 index 0000000000..2dbaf846c4 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/CpuFlushTlb.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# CpuFlushTlb.Asm +# +# Abstract: +# +# CpuFlushTlb function +# +# Notes: +# +#------------------------------------------------------------------------------ + +.global _CpuFlushTlb + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# CpuFlushTlb ( +# VOID +# ); +#------------------------------------------------------------------------------ +_CpuFlushTlb: + mov %cr3, %rax + mov %rax, %cr3 + ret diff --git a/MdePkg/Library/BaseLib/X64/CpuFlushTlb.asm b/MdePkg/Library/BaseLib/X64/CpuFlushTlb.asm new file mode 100644 index 0000000000..c2c4490e9d --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/CpuFlushTlb.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ ; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; CpuFlushTlb.Asm +; +; Abstract: +; +; CpuFlushTlb function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; CpuFlushTlb ( +; VOID +; ); +;------------------------------------------------------------------------------ +CpuFlushTlb PROC + mov rax, cr3 + mov cr3, rax + ret +CpuFlushTlb ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/CpuId.S b/MdePkg/Library/BaseLib/X64/CpuId.S new file mode 100644 index 0000000000..98d7faaa06 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/CpuId.S @@ -0,0 +1,60 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# CpuId.S +# +# Abstract: +# +# AsmCpuid function +# +# Notes: +# +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# AsmCpuid ( +# IN UINT32 RegisterInEax, +# OUT UINT32 *RegisterOutEax OPTIONAL, +# OUT UINT32 *RegisterOutEbx OPTIONAL, +# OUT UINT32 *RegisterOutEcx OPTIONAL, +# OUT UINT32 *RegisterOutEdx OPTIONAL +# ) +#------------------------------------------------------------------------------ +.global _AsmCpuid; +_AsmCpuid: + push %rbx + mov %ecx, %eax + push %rax # save Index on stack + push %rdx + cpuid + test %r9, %r9 + jz L1 + mov %ecx, (%r9) +L1: + pop %rcx + jrcxz L2 + mov %eax, (%rcx) +L2: + mov %r8, %rcx + jrcxz L3 + mov %ebx, (%rcx) +L3: + mov 0x38(%rsp), %rcx + jrcxz L4 + mov %edx, (%rcx) +L4: + pop %rax # restore Index to rax as return value + pop %rbx + ret diff --git a/MdePkg/Library/BaseLib/X64/CpuId.asm b/MdePkg/Library/BaseLib/X64/CpuId.asm new file mode 100644 index 0000000000..5e7ee19c53 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/CpuId.asm @@ -0,0 +1,62 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; CpuId.Asm +; +; Abstract: +; +; AsmCpuid function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; AsmCpuid ( +; IN UINT32 RegisterInEax, +; OUT UINT32 *RegisterOutEax OPTIONAL, +; OUT UINT32 *RegisterOutEbx OPTIONAL, +; OUT UINT32 *RegisterOutEcx OPTIONAL, +; OUT UINT32 *RegisterOutEdx OPTIONAL +; ) +;------------------------------------------------------------------------------ +AsmCpuid PROC USES rbx + mov eax, ecx + push rax ; save Index on stack + push rdx + cpuid + test r9, r9 + jz @F + mov [r9], ecx +@@: + pop rcx + jrcxz @F + mov [rcx], eax +@@: + mov rcx, r8 + jrcxz @F + mov [rcx], ebx +@@: + mov rcx, [rsp + 38h] + jrcxz @F + mov [rcx], edx +@@: + pop rax ; restore Index to rax as return value + ret +AsmCpuid ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/CpuIdEx.S b/MdePkg/Library/BaseLib/X64/CpuIdEx.S new file mode 100644 index 0000000000..e5317e04cb --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/CpuIdEx.S @@ -0,0 +1,62 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# CpuIdEx.Asm +# +# Abstract: +# +# AsmCpuidEx function +# +# Notes: +# +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# UINT32 +# EFIAPI +# AsmCpuidEx ( +# IN UINT32 RegisterInEax, +# IN UINT32 RegisterInEcx, +# OUT UINT32 *RegisterOutEax OPTIONAL, +# OUT UINT32 *RegisterOutEbx OPTIONAL, +# OUT UINT32 *RegisterOutEcx OPTIONAL, +# OUT UINT32 *RegisterOutEdx OPTIONAL +# ) +#------------------------------------------------------------------------------ +.global _AsmCpuidEx +_AsmCpuidEx: + push %rbx + movl %ecx,%eax + movl %edx,%ecx + push %rax + cpuid + mov 0x38(%rsp), %r10 + test %r10, %r10 + jz L1 + mov %ecx,(%r10) +L1: + mov %r8, %rcx + jrcxz L2 + movl %eax,(%rcx) +L2: + mov %r9, %rcx + jrcxz L3 + mov %ebx, (%rcx) +L3: + mov 0x40(%rsp), %rcx + jrcxz L4 + mov %edx, (%rcx) +L4: + pop %rax + pop %rbx + ret diff --git a/MdePkg/Library/BaseLib/X64/CpuIdEx.asm b/MdePkg/Library/BaseLib/X64/CpuIdEx.asm new file mode 100644 index 0000000000..450cf543f7 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/CpuIdEx.asm @@ -0,0 +1,64 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; CpuIdEx.Asm +; +; Abstract: +; +; AsmCpuidEx function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT32 +; EFIAPI +; AsmCpuidEx ( +; IN UINT32 RegisterInEax, +; IN UINT32 RegisterInEcx, +; OUT UINT32 *RegisterOutEax OPTIONAL, +; OUT UINT32 *RegisterOutEbx OPTIONAL, +; OUT UINT32 *RegisterOutEcx OPTIONAL, +; OUT UINT32 *RegisterOutEdx OPTIONAL +; ) +;------------------------------------------------------------------------------ +AsmCpuidEx PROC USES rbx + mov eax, ecx + mov ecx, edx + push rax ; save Index on stack + cpuid + mov r10, [rsp + 38h] + test r10, r10 + jz @F + mov [r10], ecx +@@: + mov rcx, r8 + jrcxz @F + mov [rcx], eax +@@: + mov rcx, r9 + jrcxz @F + mov [rcx], ebx +@@: + mov rcx, [rsp + 40h] + jrcxz @F + mov [rcx], edx +@@: + pop rax ; restore Index to rax as return value + ret +AsmCpuidEx ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/CpuPause.S b/MdePkg/Library/BaseLib/X64/CpuPause.S new file mode 100644 index 0000000000..0ecaa85b61 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/CpuPause.S @@ -0,0 +1,34 @@ +#------------------------------------------------------------------------------ ; +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# CpuPause.S +# +# Abstract: +# +# CpuPause function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# CpuPause ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _CpuPause; +_CpuPause: + pause + ret diff --git a/MdePkg/Library/BaseLib/X64/CpuPause.asm b/MdePkg/Library/BaseLib/X64/CpuPause.asm new file mode 100644 index 0000000000..d16da37712 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/CpuPause.asm @@ -0,0 +1,37 @@ +;------------------------------------------------------------------------------ ; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; CpuPause.Asm +; +; Abstract: +; +; CpuPause function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; CpuPause ( +; VOID +; ); +;------------------------------------------------------------------------------ +CpuPause PROC + pause + ret +CpuPause ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/CpuSleep.S b/MdePkg/Library/BaseLib/X64/CpuSleep.S new file mode 100644 index 0000000000..681e4c12c3 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/CpuSleep.S @@ -0,0 +1,34 @@ +#------------------------------------------------------------------------------ ; +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# CpuSleep.S +# +# Abstract: +# +# CpuSleep function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# CpuSleep ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _CpuSleep; +_CpuSleep: + hlt + ret diff --git a/MdePkg/Library/BaseLib/X64/CpuSleep.asm b/MdePkg/Library/BaseLib/X64/CpuSleep.asm new file mode 100644 index 0000000000..b2c4907032 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/CpuSleep.asm @@ -0,0 +1,37 @@ +;------------------------------------------------------------------------------ ; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; CpuSleep.Asm +; +; Abstract: +; +; CpuSleep function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; CpuSleep ( +; VOID +; ); +;------------------------------------------------------------------------------ +CpuSleep PROC + hlt + ret +CpuSleep ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/DisableInterrupts.S b/MdePkg/Library/BaseLib/X64/DisableInterrupts.S new file mode 100644 index 0000000000..da16886b8b --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/DisableInterrupts.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# DisableInterrupts.S +# +# Abstract: +# +# DisableInterrupts function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# DisableInterrupts ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _DisableInterrupts; +_DisableInterrupts: + cli + ret diff --git a/MdePkg/Library/BaseLib/X64/DisableInterrupts.asm b/MdePkg/Library/BaseLib/X64/DisableInterrupts.asm new file mode 100644 index 0000000000..586832c1a2 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/DisableInterrupts.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; DisableInterrupts.Asm +; +; Abstract: +; +; DisableInterrupts function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; DisableInterrupts ( +; VOID +; ); +;------------------------------------------------------------------------------ +DisableInterrupts PROC + cli + ret +DisableInterrupts ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/DisablePaging64.S b/MdePkg/Library/BaseLib/X64/DisablePaging64.S new file mode 100644 index 0000000000..d23313de38 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/DisablePaging64.S @@ -0,0 +1,66 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# DisablePaging64.S +# +# Abstract: +# +# AsmDisablePaging64 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# InternalX86DisablePaging64 ( +# IN UINT16 Cs, %rdi +# IN UINT64 EntryPoint, %rsi +# IN UINT64 Context1, OPTIONAL %rdx +# IN UINT32 Context2, OPTIONAL %rcx +# IN UINT64 NewStack %r8 +# ); +#------------------------------------------------------------------------------ + +.global _InternalX86DisablePaging64 +_InternalX86DisablePaging64: + cli + shl $0x20,%rcx + lea (%rip), %eax + mov %eax,%ecx + push %rcx + mov %edx,%ebx + mov %r8d,%esi + mov %r9d,%edi + mov 0x28(%rsp),%eax + lret +L1: + mov %eax,%esp + mov %cr0,%rax + btr $0x1f,%eax + mov %rax,%cr0 + mov $0xc0000080,%ecx + rdmsr + and $0xfe,%ah + wrmsr + mov %cr4,%rax + and $0xdf,%al + mov %rax,%cr4 + push %rdi + push %rsi + callq *%rbx + jmp . + diff --git a/MdePkg/Library/BaseLib/X64/DisablePaging64.asm b/MdePkg/Library/BaseLib/X64/DisablePaging64.asm new file mode 100644 index 0000000000..518137ddc9 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/DisablePaging64.asm @@ -0,0 +1,65 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; DisablePaging64.Asm +; +; Abstract: +; +; AsmDisablePaging64 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; InternalX86DisablePaging64 ( +; IN UINT16 Cs, +; IN UINT32 EntryPoint, +; IN UINT32 Context1, OPTIONAL +; IN UINT32 Context2, OPTIONAL +; IN UINT32 NewStack +; ); +;------------------------------------------------------------------------------ +InternalX86DisablePaging64 PROC + cli + shl rcx, 32 ; rcx[32..47] <- Cs + lea eax, @F + mov esi, r8d + or rcx, rax ; rcx[0..47] <- Cs:@F + mov edi, r9d + mov eax, [rsp + 28h] ; eax <- New Stack + push rcx + retf ; switch to compatibility mode +@@: + mov esp, eax ; set up new stack + mov rax, cr0 + btr eax, 31 + mov cr0, rax ; disable paging + mov ecx, 0c0000080h + rdmsr + and ah, NOT 1 ; clear LME + wrmsr + mov rax, cr4 + and al, NOT (1 SHL 5) ; clear PAE + mov cr4, rax + push rdi ; push Context2 + push rsi ; push Context1 + call rdx ; transfer control to EntryPoint + hlt ; no one should get here +InternalX86DisablePaging64 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/EnableDisableInterrupts.S b/MdePkg/Library/BaseLib/X64/EnableDisableInterrupts.S new file mode 100644 index 0000000000..581b7bb345 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/EnableDisableInterrupts.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# EnableDisableInterrupts.S +# +# Abstract: +# +# EnableDisableInterrupts function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# EnableDisableInterrupts ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _EnableDisableInterrupts; +.align 16; +_EnableDisableInterrupts: + sti + cli + ret diff --git a/MdePkg/Library/BaseLib/X64/EnableDisableInterrupts.asm b/MdePkg/Library/BaseLib/X64/EnableDisableInterrupts.asm new file mode 100644 index 0000000000..0d0400f007 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/EnableDisableInterrupts.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; EnableDisableInterrupts.Asm +; +; Abstract: +; +; EnableDisableInterrupts function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; EnableDisableInterrupts ( +; VOID +; ); +;------------------------------------------------------------------------------ +EnableDisableInterrupts PROC + sti + cli + ret +EnableDisableInterrupts ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/EnableInterrupts.S b/MdePkg/Library/BaseLib/X64/EnableInterrupts.S new file mode 100644 index 0000000000..b81bcd0747 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/EnableInterrupts.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# EnableInterrupts.S +# +# Abstract: +# +# EnableInterrupts function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# EnableInterrupts ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _EnableInterrupts; +_EnableInterrupts: + sti + ret diff --git a/MdePkg/Library/BaseLib/X64/EnableInterrupts.asm b/MdePkg/Library/BaseLib/X64/EnableInterrupts.asm new file mode 100644 index 0000000000..8fb4adfe37 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/EnableInterrupts.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; EnableInterrupts.Asm +; +; Abstract: +; +; EnableInterrupts function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; EnableInterrupts ( +; VOID +; ); +;------------------------------------------------------------------------------ +EnableInterrupts PROC + sti + ret +EnableInterrupts ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/EnablePaging64.S b/MdePkg/Library/BaseLib/X64/EnablePaging64.S new file mode 100644 index 0000000000..15209c0030 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/EnablePaging64.S @@ -0,0 +1,61 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# EnablePaging64.S +# +# Abstract: +# +# AsmEnablePaging64 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# InternalX86EnablePaging64 ( +# IN UINT16 Cs, %rdi +# IN UINT64 EntryPoint, %rsi +# IN UINT64 Context1, OPTIONAL %rdx +# IN UINT64 Context2, OPTIONAL %rcx +# IN UINT64 NewStack %r8 +# ); +#------------------------------------------------------------------------------ +.global _InternalX86EnablePaging64; +_InternalX86EnablePaging64: + cli + pop %rax + callq Base +Base: + addl $(L1-Base),(%rsp) + mov %cr4,%rax + or $0x20,%al + mov %rax,%cr4 + mov $0xc0000080,%ecx + rdmsr + or $0x1,%ah + wrmsr + mov %cr0,%rax + bts $0x1f,%eax + mov %rax,%cr0 + lret +L1: + addr32 mov (%esp),%rbx + addr32 mov 0x8(%esp),%rcx + addr32 mov 0x10(%esp),%rdx + addr32 mov 0x18(%esp),%rsp + add $-0x20,%rsp + callq *%rbx + jmp . diff --git a/MdePkg/Library/BaseLib/X64/EnablePaging64.asm b/MdePkg/Library/BaseLib/X64/EnablePaging64.asm new file mode 100644 index 0000000000..c54843008a --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/EnablePaging64.asm @@ -0,0 +1,64 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; EnablePaging64.Asm +; +; Abstract: +; +; AsmEnablePaging64 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; InternalX86EnablePaging64 ( +; IN UINT16 Cs, +; IN UINT64 EntryPoint, +; IN UINT64 Context1, OPTIONAL +; IN UINT64 Context2, OPTIONAL +; IN UINT64 NewStack +; ); +;------------------------------------------------------------------------------ +InternalX86EnablePaging64 PROC + cli + pop rax ; skip the return address + call @Base +@Base: + add dword ptr [rsp], @F - @Base ; offset for far retf, seg is the 1st arg + mov rax, cr4 ; mov eax, cr4 + or al, (1 SHL 5) + mov cr4, rax ; enable PAE + mov ecx, 0c0000080h + rdmsr + or ah, 1 ; set LME + wrmsr + mov rax, cr0 ; mov eax, cr0 + bts eax, 31 + mov cr0, rax ; enable paging + retf +@@: ; long mode starts here + mov rbx, [esp] + mov rcx, [esp + 8] + mov rdx, [esp + 10h] + mov rsp, [esp + 18h] + add rsp, -20h + call rbx + hlt ; halt processor if EntryPoint() returned +InternalX86EnablePaging64 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/FlushCacheLine.S b/MdePkg/Library/BaseLib/X64/FlushCacheLine.S new file mode 100644 index 0000000000..4c5a52fbf5 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/FlushCacheLine.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# FlushCacheLine.S +# +# Abstract: +# +# AsmFlushCacheLine function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID * +# EFIAPI +# AsmFlushCacheLine ( +# IN VOID *LinearAddress +# ); +#------------------------------------------------------------------------------ +.global _AsmFlushCacheLine; +_AsmFlushCacheLine: + clflush (%rdi) + mov %rdi, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/FlushCacheLine.asm b/MdePkg/Library/BaseLib/X64/FlushCacheLine.asm new file mode 100644 index 0000000000..83966a691d --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/FlushCacheLine.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; FlushCacheLine.Asm +; +; Abstract: +; +; AsmFlushCacheLine function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; EFIAPI +; AsmFlushCacheLine ( +; IN VOID *LinearAddress +; ); +;------------------------------------------------------------------------------ +AsmFlushCacheLine PROC + clflush [rcx] + mov rax, rcx + ret +AsmFlushCacheLine ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/FxRestore.S b/MdePkg/Library/BaseLib/X64/FxRestore.S new file mode 100644 index 0000000000..cc9750c57c --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/FxRestore.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# FxRestore.S +# +# Abstract: +# +# AsmFxRestore function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# InternalX86FxRestore ( +# IN CONST IA32_FX_BUFFER *Buffer +# )# +#------------------------------------------------------------------------------ +.global _InternalX86FxRestore; +_InternalX86FxRestore: + fxrstor (%rcx) + ret diff --git a/MdePkg/Library/BaseLib/X64/FxRestore.asm b/MdePkg/Library/BaseLib/X64/FxRestore.asm new file mode 100644 index 0000000000..7e7037e9e6 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/FxRestore.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; FxRestore.Asm +; +; Abstract: +; +; AsmFxRestore function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; InternalX86FxRestore ( +; IN CONST IA32_FX_BUFFER *Buffer +; ); +;------------------------------------------------------------------------------ +InternalX86FxRestore PROC + fxrstor [rcx] + ret +InternalX86FxRestore ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/FxSave.S b/MdePkg/Library/BaseLib/X64/FxSave.S new file mode 100644 index 0000000000..432d7b9c13 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/FxSave.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# FxSave.S +# +# Abstract: +# +# AsmFxSave function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# InternalX86FxSave ( +# OUT IA32_FX_BUFFER *Buffer +# ); +#------------------------------------------------------------------------------ +.global _InternalX86FxSave; +_InternalX86FxSave: + fxsave (%rcx) + ret diff --git a/MdePkg/Library/BaseLib/X64/FxSave.asm b/MdePkg/Library/BaseLib/X64/FxSave.asm new file mode 100644 index 0000000000..ea19cd1648 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/FxSave.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; FxSave.Asm +; +; Abstract: +; +; AsmFxSave function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; InternalX86FxSave ( +; OUT IA32_FX_BUFFER *Buffer +; ); +;------------------------------------------------------------------------------ +InternalX86FxSave PROC + fxsave [rcx] + ret +InternalX86FxSave ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange32.S b/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange32.S new file mode 100644 index 0000000000..cd85279c73 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange32.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# InterlockedCompareExchange32.Asm +# +# Abstract: +# +# InterlockedCompareExchange32 function +# +# Notes: +# +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# UINT32 +# EFIAPI +# InterlockedCompareExchange32 ( +# IN UINT32 *Value, +# IN UINT32 CompareValue, +# IN UINT32 ExchangeValue +# ); +#------------------------------------------------------------------------------ +.global _InternalSyncCompareExchange32; +_InternalSyncCompareExchange32: + mov %edx, %eax + lock cmpxchg %r8d, (%rcx) + ret diff --git a/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange32.asm b/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange32.asm new file mode 100644 index 0000000000..55b055453f --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange32.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; InterlockedCompareExchange32.Asm +; +; Abstract: +; +; InterlockedCompareExchange32 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT32 +; EFIAPI +; InterlockedCompareExchange32 ( +; IN UINT32 *Value, +; IN UINT32 CompareValue, +; IN UINT32 ExchangeValue +; ); +;------------------------------------------------------------------------------ +InternalSyncCompareExchange32 PROC + mov eax, edx + lock cmpxchg [rcx], r8d + ret +InternalSyncCompareExchange32 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange32.c b/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange32.c new file mode 100644 index 0000000000..4a9fe6aca6 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange32.c @@ -0,0 +1,36 @@ +/** @file + InterlockedCompareExchange32 function + + Copyright (c) 2006 - 2007, 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. + +**/ + +// +// Microsoft Visual Studio 7.1 Function Prototypes for I/O Intrinsics +// +long _InterlockedCompareExchange( + long volatile * Destination, + long Exchange, + long Comperand +); + +#pragma intrinsic(_InterlockedCompareExchange) + +UINT32 +EFIAPI +InternalSyncCompareExchange32 ( + IN UINT32 *Value, + IN UINT32 CompareValue, + IN UINT32 ExchangeValue + ) +{ + return _InterlockedCompareExchange (Value, ExchangeValue, CompareValue); +} + diff --git a/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange64.S b/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange64.S new file mode 100644 index 0000000000..ae27964292 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange64.S @@ -0,0 +1,39 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# InterlockedCompareExchange64.S +# +# Abstract: +# +# InterlockedCompareExchange64 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# InterlockedCompareExchange64 ( +# IN UINT64 *Value, +# IN UINT64 CompareValue, +# IN UINT64 ExchangeValue +# ); +#------------------------------------------------------------------------------ +.global _InternalSyncCompareExchange64; +.align 16; +_InternalSyncCompareExchange64: + mov %rsi, %rax + lock cmpxchg %rdx,(%rdi) + ret diff --git a/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange64.asm b/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange64.asm new file mode 100644 index 0000000000..88c25a56de --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange64.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; InterlockedCompareExchange64.Asm +; +; Abstract: +; +; InterlockedCompareExchange64 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; InterlockedCompareExchange64 ( +; IN UINT64 *Value, +; IN UINT64 CompareValue, +; IN UINT64 ExchangeValue +; ); +;------------------------------------------------------------------------------ +InternalSyncCompareExchange64 PROC + mov rax, rdx + lock cmpxchg [rcx], r8 + ret +InternalSyncCompareExchange64 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange64.c b/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange64.c new file mode 100644 index 0000000000..bed1dc8972 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/InterlockedCompareExchange64.c @@ -0,0 +1,36 @@ +/** @file + InterlockedCompareExchange64 function + + Copyright (c) 2006 - 2007, 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. + +**/ + +// +// Microsoft Visual Studio 7.1 Function Prototypes for I/O Intrinsics +// +__int64 _InterlockedCompareExchange64( + __int64 volatile * Destination, + __int64 Exchange, + __int64 Comperand +); + +#pragma intrinsic(_InterlockedCompareExchange64) + +UINT64 +EFIAPI +InternalSyncCompareExchange64 ( + IN UINT64 *Value, + IN UINT64 CompareValue, + IN UINT64 ExchangeValue + ) +{ + return _InterlockedCompareExchange64 (Value, ExchangeValue, CompareValue); +} + diff --git a/MdePkg/Library/BaseLib/X64/InterlockedDecrement.S b/MdePkg/Library/BaseLib/X64/InterlockedDecrement.S new file mode 100644 index 0000000000..59ca54bb9f --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/InterlockedDecrement.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# InterlockedDecrement.S +# +# Abstract: +# +# InterlockedDecrement function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT32 +# EFIAPI +# InterlockedDecrement ( +# IN UINT32 *Value +# ); +#------------------------------------------------------------------------------ +.global _InternalSyncDecrement; +_InternalSyncDecrement: + lock decl (%rcx) + mov (%rcx), %eax + ret diff --git a/MdePkg/Library/BaseLib/X64/InterlockedDecrement.asm b/MdePkg/Library/BaseLib/X64/InterlockedDecrement.asm new file mode 100644 index 0000000000..f907fed4a8 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/InterlockedDecrement.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; InterlockedDecrement.Asm +; +; Abstract: +; +; InterlockedDecrement function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT32 +; EFIAPI +; InterlockedDecrement ( +; IN UINT32 *Value +; ); +;------------------------------------------------------------------------------ +InternalSyncDecrement PROC + lock dec dword ptr [rcx] + mov eax, [rcx] + ret +InternalSyncDecrement ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/InterlockedDecrement.c b/MdePkg/Library/BaseLib/X64/InterlockedDecrement.c new file mode 100644 index 0000000000..19e6a5dc49 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/InterlockedDecrement.c @@ -0,0 +1,32 @@ +/** @file + InterlockedDecrement function + + Copyright (c) 2006 - 2007, 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. + +**/ + +// +// Microsoft Visual Studio 7.1 Function Prototypes for I/O Intrinsics +// +long _InterlockedDecrement( + long * lpAddend +); + +#pragma intrinsic(_InterlockedDecrement) + +UINT32 +EFIAPI +InternalSyncDecrement ( + IN UINT32 *Value + ) +{ + return _InterlockedDecrement (Value); +} + diff --git a/MdePkg/Library/BaseLib/X64/InterlockedIncrement.S b/MdePkg/Library/BaseLib/X64/InterlockedIncrement.S new file mode 100644 index 0000000000..df4cb974b6 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/InterlockedIncrement.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# InterlockedIncrement.S +# +# Abstract: +# +# InterlockedIncrement function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT32 +# EFIAPI +# InterlockedIncrement ( +# IN UINT32 *Value +# ); +#------------------------------------------------------------------------------ +.global _InternalSyncIncrement; +_InternalSyncIncrement: + lock incl (%rcx) + mov (%rcx), %eax + ret diff --git a/MdePkg/Library/BaseLib/X64/InterlockedIncrement.asm b/MdePkg/Library/BaseLib/X64/InterlockedIncrement.asm new file mode 100644 index 0000000000..f5a4130bf1 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/InterlockedIncrement.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; InterlockedIncrement.Asm +; +; Abstract: +; +; InterlockedIncrement function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT32 +; EFIAPI +; InterlockedIncrement ( +; IN UINT32 *Value +; ); +;------------------------------------------------------------------------------ +InternalSyncIncrement PROC + lock inc dword ptr [rcx] + mov eax, [rcx] + ret +InternalSyncIncrement ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/InterlockedIncrement.c b/MdePkg/Library/BaseLib/X64/InterlockedIncrement.c new file mode 100644 index 0000000000..eda9f79a5b --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/InterlockedIncrement.c @@ -0,0 +1,32 @@ +/** @file + InterLockedIncrement function + + Copyright (c) 2006 - 2007, 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. + +**/ + +// +// Microsoft Visual Studio 7.1 Function Prototypes for I/O Intrinsics +// +long _InterlockedIncrement( + long * lpAddend +); + +#pragma intrinsic(_InterlockedIncrement) + +UINT32 +EFIAPI +InternalSyncIncrement ( + IN UINT32 *Value + ) +{ + return _InterlockedIncrement (Value); +} + diff --git a/MdePkg/Library/BaseLib/X64/Invd.S b/MdePkg/Library/BaseLib/X64/Invd.S new file mode 100644 index 0000000000..030ae454e6 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/Invd.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# Invd.S +# +# Abstract: +# +# AsmInvd function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# AsmInvd ( +# VOID +# )# +#------------------------------------------------------------------------------ +.global _AsmInvd; +_AsmInvd: + invd + ret diff --git a/MdePkg/Library/BaseLib/X64/Invd.asm b/MdePkg/Library/BaseLib/X64/Invd.asm new file mode 100644 index 0000000000..446587923b --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/Invd.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; Invd.Asm +; +; Abstract: +; +; AsmInvd function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; AsmInvd ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmInvd PROC + invd + ret +AsmInvd ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/LongJump.S b/MdePkg/Library/BaseLib/X64/LongJump.S new file mode 100644 index 0000000000..1a6f859c8e --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/LongJump.S @@ -0,0 +1,42 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# LongJump.Asm +# +# Abstract: +# +# Implementation of _LongJump() on x64. +# +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# InternalLongJump ( +# IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer, +# IN UINTN Value +# ); +#------------------------------------------------------------------------------ +.global _InternalLongJump +_InternalLongJump: + mov (%rcx), %rbx + mov 0x8(%rcx), %rsp + mov 0x10(%rcx), %rbp + mov 0x18(%rcx), %rdi + mov 0x20(%rcx), %rsi + mov 0x28(%rcx), %r12 + mov 0x30(%rcx), %r13 + mov 0x38(%rcx), %r14 + mov 0x40(%rcx), %r15 + mov %rdx, %rax + jmp *0x48(%rcx) diff --git a/MdePkg/Library/BaseLib/X64/LongJump.asm b/MdePkg/Library/BaseLib/X64/LongJump.asm new file mode 100644 index 0000000000..38e5606081 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/LongJump.asm @@ -0,0 +1,46 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; LongJump.Asm +; +; Abstract: +; +; Implementation of _LongJump() on x64. +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; InternalLongJump ( +; IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer, +; IN UINTN Value +; ); +;------------------------------------------------------------------------------ +InternalLongJump PROC + mov rbx, [rcx] + mov rsp, [rcx + 8] + mov rbp, [rcx + 10h] + mov rdi, [rcx + 18h] + mov rsi, [rcx + 20h] + mov r12, [rcx + 28h] + mov r13, [rcx + 30h] + mov r14, [rcx + 38h] + mov r15, [rcx + 40h] + mov rax, rdx ; set return value + jmp qword ptr [rcx + 48h] +InternalLongJump ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/Monitor.S b/MdePkg/Library/BaseLib/X64/Monitor.S new file mode 100644 index 0000000000..13da27d8ad --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/Monitor.S @@ -0,0 +1,41 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# Monitor.S +# +# Abstract: +# +# AsmMonitor function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# AsmMonitor ( +# IN UINTN Eax, +# IN UINTN Ecx, +# IN UINTN Edx +# ); +#------------------------------------------------------------------------------ +.global _AsmMonitor; +.align 16; +_AsmMonitor: + mov %ecx,%eax + mov %edx,%ecx + mov %r8d,%edx + monitor + ret diff --git a/MdePkg/Library/BaseLib/X64/Monitor.asm b/MdePkg/Library/BaseLib/X64/Monitor.asm new file mode 100644 index 0000000000..ec9c3f8d03 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/Monitor.asm @@ -0,0 +1,43 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; Monitor.Asm +; +; Abstract: +; +; AsmMonitor function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; AsmMonitor ( +; IN UINTN Eax, +; IN UINTN Ecx, +; IN UINTN Edx +; ); +;------------------------------------------------------------------------------ +AsmMonitor PROC + mov eax, ecx + mov ecx, edx + mov edx, r8d + DB 0fh, 1, 0c8h ; monitor + ret +AsmMonitor ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/Mwait.S b/MdePkg/Library/BaseLib/X64/Mwait.S new file mode 100644 index 0000000000..a32d004a18 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/Mwait.S @@ -0,0 +1,39 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# Mwait.S +# +# Abstract: +# +# AsmMwait function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# AsmMwait ( +# IN UINTN Eax, +# IN UINTN Ecx +# ); +#------------------------------------------------------------------------------ +.global _AsmMwait; +.align 16; +_AsmMwait: + mov %ecx,%eax + mov %edx,%ecx + mwait %rax,%rcx + ret diff --git a/MdePkg/Library/BaseLib/X64/Mwait.asm b/MdePkg/Library/BaseLib/X64/Mwait.asm new file mode 100644 index 0000000000..aae1d42758 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/Mwait.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; Mwait.Asm +; +; Abstract: +; +; AsmMwait function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; AsmMwait ( +; IN UINTN Eax, +; IN UINTN Ecx +; ); +;------------------------------------------------------------------------------ +AsmMwait PROC + mov eax, ecx + mov ecx, edx + DB 0fh, 1, 0c9h ; mwait + ret +AsmMwait ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/Non-existing.c b/MdePkg/Library/BaseLib/X64/Non-existing.c new file mode 100644 index 0000000000..4f0c932380 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/Non-existing.c @@ -0,0 +1,110 @@ +/** @file + Non-existing BaseLib functions on x64 + + Copyright (c) 2006, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + Module Name: Non-existing.c + +**/ + +#include "../BaseLibInternals.h" + +/** + Enables the 32-bit paging mode on the CPU. + + Enables the 32-bit paging mode on the CPU. CR0, CR3, CR4, and the page tables + must be properly initialized prior to calling this service. This function + assumes the current execution mode is 32-bit protected mode. This function is + only available on IA-32. After the 32-bit paging mode is enabled, control is + transferred to the function specified by EntryPoint using the new stack + specified by NewStack and passing in the parameters specified by Context1 and + Context2. Context1 and Context2 are optional and may be NULL. The function + EntryPoint must never return. + + There are a number of constraints that must be followed before calling this + function: + 1) Interrupts must be disabled. + 2) The caller must be in 32-bit protected mode with flat descriptors. This + means all descriptors must have a base of 0 and a limit of 4GB. + 3) CR0 and CR4 must be compatible with 32-bit protected mode with flat + descriptors. + 4) CR3 must point to valid page tables that will be used once the transition + is complete, and those page tables must guarantee that the pages for this + function and the stack are identity mapped. + + @param EntryPoint A pointer to function to call with the new stack after + paging is enabled. + @param Context1 A pointer to the context to pass into the EntryPoint + function as the first parameter after paging is enabled. + @param Context2 A pointer to the context to pass into the EntryPoint + function as the second parameter after paging is enabled. + @param NewStack A pointer to the new stack to use for the EntryPoint + function after paging is enabled. + +**/ +VOID +EFIAPI +InternalX86EnablePaging32 ( + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1, OPTIONAL + IN VOID *Context2, OPTIONAL + IN VOID *NewStack + ) +{ + // + // This function cannot work on X64 platform + // + ASSERT (FALSE); +} + +/** + Disables the 32-bit paging mode on the CPU. + + Disables the 32-bit paging mode on the CPU and returns to 32-bit protected + mode. This function assumes the current execution mode is 32-paged protected + mode. This function is only available on IA-32. After the 32-bit paging mode + is disabled, control is transferred to the function specified by EntryPoint + using the new stack specified by NewStack and passing in the parameters + specified by Context1 and Context2. Context1 and Context2 are optional and + may be NULL. The function EntryPoint must never return. + + There are a number of constraints that must be followed before calling this + function: + 1) Interrupts must be disabled. + 2) The caller must be in 32-bit paged mode. + 3) CR0, CR3, and CR4 must be compatible with 32-bit paged mode. + 4) CR3 must point to valid page tables that guarantee that the pages for + this function and the stack are identity mapped. + + @param EntryPoint A pointer to function to call with the new stack after + paging is disabled. + @param Context1 A pointer to the context to pass into the EntryPoint + function as the first parameter after paging is disabled. + @param Context2 A pointer to the context to pass into the EntryPoint + function as the second parameter after paging is + disabled. + @param NewStack A pointer to the new stack to use for the EntryPoint + function after paging is disabled. + +**/ +VOID +EFIAPI +InternalX86DisablePaging32 ( + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1, OPTIONAL + IN VOID *Context2, OPTIONAL + IN VOID *NewStack + ) +{ + // + // This function cannot work on X64 platform + // + ASSERT (FALSE); +} diff --git a/MdePkg/Library/BaseLib/X64/ReadCr0.S b/MdePkg/Library/BaseLib/X64/ReadCr0.S new file mode 100644 index 0000000000..fa916d09fb --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadCr0.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadCr0.S +# +# Abstract: +# +# AsmReadCr0 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmReadCr0 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadCr0; +.align 16; +_AsmReadCr0: + mov %cr0, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadCr0.asm b/MdePkg/Library/BaseLib/X64/ReadCr0.asm new file mode 100644 index 0000000000..3e369c3a81 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadCr0.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadCr0.Asm +; +; Abstract: +; +; AsmReadCr0 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmReadCr0 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadCr0 PROC + mov rax, cr0 + ret +AsmReadCr0 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadCr2.S b/MdePkg/Library/BaseLib/X64/ReadCr2.S new file mode 100644 index 0000000000..96361bef72 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadCr2.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadCr2.S +# +# Abstract: +# +# AsmReadCr2 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmReadCr2 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadCr2; +.align 16; +_AsmReadCr2: + mov %cr2, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadCr2.asm b/MdePkg/Library/BaseLib/X64/ReadCr2.asm new file mode 100644 index 0000000000..8476f5af18 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadCr2.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadCr2.Asm +; +; Abstract: +; +; AsmReadCr2 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmReadCr2 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadCr2 PROC + mov rax, cr2 + ret +AsmReadCr2 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadCr3.S b/MdePkg/Library/BaseLib/X64/ReadCr3.S new file mode 100644 index 0000000000..480486f093 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadCr3.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadCr3.S +# +# Abstract: +# +# AsmReadCr3 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmReadCr3 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadCr3; +.align 16; +_AsmReadCr3: + mov %cr3, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadCr3.asm b/MdePkg/Library/BaseLib/X64/ReadCr3.asm new file mode 100644 index 0000000000..af54d46373 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadCr3.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadCr3.Asm +; +; Abstract: +; +; AsmReadCr3 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmReadCr3 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadCr3 PROC + mov rax, cr3 + ret +AsmReadCr3 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadCr4.S b/MdePkg/Library/BaseLib/X64/ReadCr4.S new file mode 100644 index 0000000000..e89b5cdab6 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadCr4.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadCr4.S +# +# Abstract: +# +# AsmReadCr4 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmReadCr4 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadCr4; +.align 16; +_AsmReadCr4: + mov %cr4, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadCr4.asm b/MdePkg/Library/BaseLib/X64/ReadCr4.asm new file mode 100644 index 0000000000..c8a881db9e --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadCr4.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadCr4.Asm +; +; Abstract: +; +; AsmReadCr4 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmReadCr4 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadCr4 PROC + mov rax, cr4 + ret +AsmReadCr4 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadCs.S b/MdePkg/Library/BaseLib/X64/ReadCs.S new file mode 100644 index 0000000000..677747b813 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadCs.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadCs.S +# +# Abstract: +# +# AsmReadCs function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT16 +# EFIAPI +# AsmReadCs ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadCs; +.align 16; +_AsmReadCs: + mov %cs, %eax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadCs.asm b/MdePkg/Library/BaseLib/X64/ReadCs.asm new file mode 100644 index 0000000000..642ce5b169 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadCs.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadCs.Asm +; +; Abstract: +; +; AsmReadCs function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT16 +; EFIAPI +; AsmReadCs ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadCs PROC + mov eax, cs + ret +AsmReadCs ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadDr0.S b/MdePkg/Library/BaseLib/X64/ReadDr0.S new file mode 100644 index 0000000000..1b441c344d --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr0.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadDr0.S +# +# Abstract: +# +# AsmReadDr0 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmReadDr0 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadDr0; +.align 16; +_AsmReadDr0: + mov %dr0, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadDr0.asm b/MdePkg/Library/BaseLib/X64/ReadDr0.asm new file mode 100644 index 0000000000..7e0d6b714a --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr0.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadDr0.Asm +; +; Abstract: +; +; AsmReadDr0 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmReadDr0 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadDr0 PROC + mov rax, dr0 + ret +AsmReadDr0 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadDr1.S b/MdePkg/Library/BaseLib/X64/ReadDr1.S new file mode 100644 index 0000000000..5151a80d9c --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr1.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadDr1.S +# +# Abstract: +# +# AsmReadDr1 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmReadDr1 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadDr1; +.align 16; +_AsmReadDr1: + mov %dr1, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadDr1.asm b/MdePkg/Library/BaseLib/X64/ReadDr1.asm new file mode 100644 index 0000000000..22f11c4e0f --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr1.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadDr1.Asm +; +; Abstract: +; +; AsmReadDr1 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmReadDr1 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadDr1 PROC + mov rax, dr1 + ret +AsmReadDr1 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadDr2.S b/MdePkg/Library/BaseLib/X64/ReadDr2.S new file mode 100644 index 0000000000..f4516afd4d --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr2.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadDr2.S +# +# Abstract: +# +# AsmReadDr2 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmReadDr2 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadDr2; +.align 16; +_AsmReadDr2: + mov %dr2, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadDr2.asm b/MdePkg/Library/BaseLib/X64/ReadDr2.asm new file mode 100644 index 0000000000..3b81605861 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr2.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadDr2.Asm +; +; Abstract: +; +; AsmReadDr2 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmReadDr2 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadDr2 PROC + mov rax, dr2 + ret +AsmReadDr2 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadDr3.S b/MdePkg/Library/BaseLib/X64/ReadDr3.S new file mode 100644 index 0000000000..c5c679c96e --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr3.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadDr3.S +# +# Abstract: +# +# AsmReadDr3 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmReadDr3 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadDr3; +.align 16; +_AsmReadDr3: + mov %dr3, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadDr3.asm b/MdePkg/Library/BaseLib/X64/ReadDr3.asm new file mode 100644 index 0000000000..1968fd0d67 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr3.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadDr3.Asm +; +; Abstract: +; +; AsmReadDr3 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmReadDr3 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadDr3 PROC + mov rax, dr3 + ret +AsmReadDr3 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadDr4.S b/MdePkg/Library/BaseLib/X64/ReadDr4.S new file mode 100644 index 0000000000..f98c9ed35d --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr4.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadDr4.S +# +# Abstract: +# +# AsmReadDr4 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmReadDr4 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadDr4; +.align 16; +_AsmReadDr4: + #DB 0fh, 21h, 0e0h + mov %dr4, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadDr4.asm b/MdePkg/Library/BaseLib/X64/ReadDr4.asm new file mode 100644 index 0000000000..2bed12928b --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr4.asm @@ -0,0 +1,42 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadDr4.Asm +; +; Abstract: +; +; AsmReadDr4 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmReadDr4 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadDr4 PROC + ; + ; There's no obvious reason to access this register, since it's aliased to + ; DR7 when DE=0 or an exception generated when DE=1 + ; + DB 0fh, 21h, 0e0h + ret +AsmReadDr4 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadDr5.S b/MdePkg/Library/BaseLib/X64/ReadDr5.S new file mode 100644 index 0000000000..421f57a418 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr5.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadDr5.S +# +# Abstract: +# +# AsmReadDr5 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmReadDr5 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadDr5; +.align 16; +_AsmReadDr5: + mov %dr5, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadDr5.asm b/MdePkg/Library/BaseLib/X64/ReadDr5.asm new file mode 100644 index 0000000000..3bee3a56ec --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr5.asm @@ -0,0 +1,42 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadDr5.Asm +; +; Abstract: +; +; AsmReadDr5 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmReadDr5 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadDr5 PROC + ; + ; There's no obvious reason to access this register, since it's aliased to + ; DR7 when DE=0 or an exception generated when DE=1 + ; + DB 0fh, 21h, 0e8h + ret +AsmReadDr5 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadDr6.S b/MdePkg/Library/BaseLib/X64/ReadDr6.S new file mode 100644 index 0000000000..6a159d8762 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr6.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadDr6.S +# +# Abstract: +# +# AsmReadDr6 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmReadDr6 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadDr6; +.align 16; +_AsmReadDr6: + mov %dr6, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadDr6.asm b/MdePkg/Library/BaseLib/X64/ReadDr6.asm new file mode 100644 index 0000000000..a3dafb9b9f --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr6.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadDr6.Asm +; +; Abstract: +; +; AsmReadDr6 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmReadDr6 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadDr6 PROC + mov rax, dr6 + ret +AsmReadDr6 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadDr7.S b/MdePkg/Library/BaseLib/X64/ReadDr7.S new file mode 100644 index 0000000000..9ffb09d13a --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr7.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadDr7.S +# +# Abstract: +# +# AsmReadDr7 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmReadDr7 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadDr7; +.align 16; +_AsmReadDr7: + mov %dr7, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadDr7.asm b/MdePkg/Library/BaseLib/X64/ReadDr7.asm new file mode 100644 index 0000000000..0cff14b5c4 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDr7.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadDr7.Asm +; +; Abstract: +; +; AsmReadDr7 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmReadDr7 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadDr7 PROC + mov rax, dr7 + ret +AsmReadDr7 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadDs.S b/MdePkg/Library/BaseLib/X64/ReadDs.S new file mode 100644 index 0000000000..58bee11beb --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDs.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadDs.S +# +# Abstract: +# +# AsmReadDs function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT16 +# EFIAPI +# AsmReadDs ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadDs; +.align 16; +_AsmReadDs: + movl %ds, %eax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadDs.asm b/MdePkg/Library/BaseLib/X64/ReadDs.asm new file mode 100644 index 0000000000..6f2629872b --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadDs.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadDs.Asm +; +; Abstract: +; +; AsmReadDs function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT16 +; EFIAPI +; AsmReadDs ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadDs PROC + mov eax, ds + ret +AsmReadDs ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadEflags.S b/MdePkg/Library/BaseLib/X64/ReadEflags.S new file mode 100644 index 0000000000..e895387673 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadEflags.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadEflags.S +# +# Abstract: +# +# AsmReadEflags function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmReadEflags ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadEflags; +.align 16; +_AsmReadEflags: + pushfq + pop %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadEflags.asm b/MdePkg/Library/BaseLib/X64/ReadEflags.asm new file mode 100644 index 0000000000..174ae95887 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadEflags.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadEflags.Asm +; +; Abstract: +; +; AsmReadEflags function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmReadEflags ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadEflags PROC + pushfq + pop rax + ret +AsmReadEflags ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadEs.S b/MdePkg/Library/BaseLib/X64/ReadEs.S new file mode 100644 index 0000000000..93df650371 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadEs.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadEs.S +# +# Abstract: +# +# AsmReadEs function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT16 +# EFIAPI +# AsmReadEs ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadEs; +.align 16; +_AsmReadEs: + mov %es, %eax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadEs.asm b/MdePkg/Library/BaseLib/X64/ReadEs.asm new file mode 100644 index 0000000000..d5fe84d73f --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadEs.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadEs.Asm +; +; Abstract: +; +; AsmReadEs function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT16 +; EFIAPI +; AsmReadEs ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadEs PROC + mov eax, es + ret +AsmReadEs ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadFs.S b/MdePkg/Library/BaseLib/X64/ReadFs.S new file mode 100644 index 0000000000..ff658e1248 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadFs.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadFs.S +# +# Abstract: +# +# AsmReadFs function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT16 +# EFIAPI +# AsmReadFs ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadFs; +.align 16; +_AsmReadFs: + mov %fs, %eax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadFs.asm b/MdePkg/Library/BaseLib/X64/ReadFs.asm new file mode 100644 index 0000000000..d44ee545af --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadFs.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadFs.Asm +; +; Abstract: +; +; AsmReadFs function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT16 +; EFIAPI +; AsmReadFs ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadFs PROC + mov eax, fs + ret +AsmReadFs ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadGdtr.S b/MdePkg/Library/BaseLib/X64/ReadGdtr.S new file mode 100644 index 0000000000..c271a02d78 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadGdtr.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadGdtr.S +# +# Abstract: +# +# AsmReadGdtr function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# InternalX86ReadGdtr ( +# OUT IA32_DESCRIPTOR *Gdtr +# ); +#------------------------------------------------------------------------------ +.global _InternalX86ReadGdtr; +.align 16; +_InternalX86ReadGdtr: + sgdt (%rcx) + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadGdtr.asm b/MdePkg/Library/BaseLib/X64/ReadGdtr.asm new file mode 100644 index 0000000000..0bc2949b54 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadGdtr.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadGdtr.Asm +; +; Abstract: +; +; AsmReadGdtr function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; InternalX86ReadGdtr ( +; OUT IA32_DESCRIPTOR *Gdtr +; ); +;------------------------------------------------------------------------------ +InternalX86ReadGdtr PROC + sgdt fword ptr [rcx] + ret +InternalX86ReadGdtr ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadGs.S b/MdePkg/Library/BaseLib/X64/ReadGs.S new file mode 100644 index 0000000000..f92776c35d --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadGs.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadGs.S +# +# Abstract: +# +# AsmReadGs function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT16 +# EFIAPI +# AsmReadGs ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadGs; +.align 16; +_AsmReadGs: + mov %gs, %eax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadGs.asm b/MdePkg/Library/BaseLib/X64/ReadGs.asm new file mode 100644 index 0000000000..bc5de7691b --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadGs.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadGs.Asm +; +; Abstract: +; +; AsmReadGs function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT16 +; EFIAPI +; AsmReadGs ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadGs PROC + mov eax, gs + ret +AsmReadGs ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadIdtr.S b/MdePkg/Library/BaseLib/X64/ReadIdtr.S new file mode 100644 index 0000000000..cd7c09e6b7 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadIdtr.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadIdtr.AS +# +# Abstract: +# +# AsmReadIdtr function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# InternalX86ReadIdtr ( +# OUT IA32_DESCRIPTOR *Idtr +# ); +#------------------------------------------------------------------------------ +.global _InternalX86ReadIdtr; +.align 16; +_InternalX86ReadIdtr: + sidt (%rcx) + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadIdtr.asm b/MdePkg/Library/BaseLib/X64/ReadIdtr.asm new file mode 100644 index 0000000000..db684f3671 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadIdtr.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadIdtr.Asm +; +; Abstract: +; +; AsmReadIdtr function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; InternalX86ReadIdtr ( +; OUT IA32_DESCRIPTOR *Idtr +; ); +;------------------------------------------------------------------------------ +InternalX86ReadIdtr PROC + sidt fword ptr [rcx] + ret +InternalX86ReadIdtr ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadLdtr.S b/MdePkg/Library/BaseLib/X64/ReadLdtr.S new file mode 100644 index 0000000000..fac8e25d74 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadLdtr.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadLdtr.AS +# +# Abstract: +# +# AsmReadLdtr function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT16 +# EFIAPI +# AsmReadLdtr ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadLdtr; +.align 16; +_AsmReadLdtr: + sldt %eax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadLdtr.asm b/MdePkg/Library/BaseLib/X64/ReadLdtr.asm new file mode 100644 index 0000000000..3d6a2f8843 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadLdtr.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadLdtr.Asm +; +; Abstract: +; +; AsmReadLdtr function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT16 +; EFIAPI +; AsmReadLdtr ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadLdtr PROC + sldt eax + ret +AsmReadLdtr ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadMm0.S b/MdePkg/Library/BaseLib/X64/ReadMm0.S new file mode 100644 index 0000000000..b5912ca0b4 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm0.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadMm0.S +# +# Abstract: +# +# AsmReadMm0 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# AsmReadMm0 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadMm0; +.align 16; +_AsmReadMm0: + #DB 48h, 0fh, 7eh, 0c0h + movd %mm0, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadMm0.asm b/MdePkg/Library/BaseLib/X64/ReadMm0.asm new file mode 100644 index 0000000000..0ed5c8f8ae --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm0.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadMm0.Asm +; +; Abstract: +; +; AsmReadMm0 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; AsmReadMm0 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadMm0 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 7eh, 0c0h + ret +AsmReadMm0 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadMm1.S b/MdePkg/Library/BaseLib/X64/ReadMm1.S new file mode 100644 index 0000000000..1f26cd4483 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm1.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadMm1.S +# +# Abstract: +# +# AsmReadMm1 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# AsmReadMm1 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadMm1; +.align 16; +_AsmReadMm1: + #DB 48h, 0fh, 7eh, 0c8h + movd %mm1, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadMm1.asm b/MdePkg/Library/BaseLib/X64/ReadMm1.asm new file mode 100644 index 0000000000..e24fcb5f9d --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm1.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadMm1.Asm +; +; Abstract: +; +; AsmReadMm1 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; AsmReadMm1 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadMm1 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 7eh, 0c8h + ret +AsmReadMm1 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadMm2.S b/MdePkg/Library/BaseLib/X64/ReadMm2.S new file mode 100644 index 0000000000..ef864af090 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm2.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadMm2.S +# +# Abstract: +# +# AsmReadMm2 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# AsmReadMm2 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadMm2; +.align 16; +_AsmReadMm2: + #DB 48h, 0fh, 7eh, 0d0h + movd %mm2, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadMm2.asm b/MdePkg/Library/BaseLib/X64/ReadMm2.asm new file mode 100644 index 0000000000..860326b375 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm2.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadMm2.Asm +; +; Abstract: +; +; AsmReadMm2 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; AsmReadMm2 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadMm2 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 7eh, 0d0h + ret +AsmReadMm2 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadMm3.S b/MdePkg/Library/BaseLib/X64/ReadMm3.S new file mode 100644 index 0000000000..bd76cb20a2 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm3.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadMm3.S +# +# Abstract: +# +# AsmReadMm3 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# AsmReadMm3 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadMm3; +.align 16; +_AsmReadMm3: + #DB 48h, 0fh, 7eh, 0d8h + movd %mm3, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadMm3.asm b/MdePkg/Library/BaseLib/X64/ReadMm3.asm new file mode 100644 index 0000000000..aca6f3d2df --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm3.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadMm3.Asm +; +; Abstract: +; +; AsmReadMm3 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; AsmReadMm3 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadMm3 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 7eh, 0d8h + ret +AsmReadMm3 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadMm4.S b/MdePkg/Library/BaseLib/X64/ReadMm4.S new file mode 100644 index 0000000000..99d766887c --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm4.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadMm4.AS +# +# Abstract: +# +# AsmReadMm4 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# AsmReadMm4 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadMm4; +.align 16; +_AsmReadMm4: + #DB 48h, 0fh, 7eh, 0e0h + movd %mm4, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadMm4.asm b/MdePkg/Library/BaseLib/X64/ReadMm4.asm new file mode 100644 index 0000000000..dd52f99436 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm4.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadMm4.Asm +; +; Abstract: +; +; AsmReadMm4 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; AsmReadMm4 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadMm4 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 7eh, 0e0h + ret +AsmReadMm4 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadMm5.S b/MdePkg/Library/BaseLib/X64/ReadMm5.S new file mode 100644 index 0000000000..7a01c53ca5 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm5.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadMm5.S +# +# Abstract: +# +# AsmReadMm5 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# AsmReadMm5 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadMm5; +.align 16; +_AsmReadMm5: + #DB 48h, 0fh, 7eh, 0e8h + movd %mm5, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadMm5.asm b/MdePkg/Library/BaseLib/X64/ReadMm5.asm new file mode 100644 index 0000000000..1f30e4bed4 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm5.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadMm5.Asm +; +; Abstract: +; +; AsmReadMm5 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; AsmReadMm5 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadMm5 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 7eh, 0e8h + ret +AsmReadMm5 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadMm6.S b/MdePkg/Library/BaseLib/X64/ReadMm6.S new file mode 100644 index 0000000000..0c7ea79858 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm6.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadMm6.S +# +# Abstract: +# +# AsmReadMm6 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# AsmReadMm6 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadMm6; +.align 16; +_AsmReadMm6: + #DB 48h, 0fh, 7eh, 0f0h + movd %mm6, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadMm6.asm b/MdePkg/Library/BaseLib/X64/ReadMm6.asm new file mode 100644 index 0000000000..4e1f2a824b --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm6.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadMm6.Asm +; +; Abstract: +; +; AsmReadMm6 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; AsmReadMm6 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadMm6 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 7eh, 0f0h + ret +AsmReadMm6 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadMm7.S b/MdePkg/Library/BaseLib/X64/ReadMm7.S new file mode 100644 index 0000000000..68f1dbdd30 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm7.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadMm7.S +# +# Abstract: +# +# AsmReadMm7 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# AsmReadMm7 ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadMm7; +.align 16; +_AsmReadMm7: + #DB 48h, 0fh, 7eh, 0f8h + movd %mm7, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadMm7.asm b/MdePkg/Library/BaseLib/X64/ReadMm7.asm new file mode 100644 index 0000000000..d871a9f8dc --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMm7.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadMm7.Asm +; +; Abstract: +; +; AsmReadMm7 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; AsmReadMm7 ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadMm7 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 7eh, 0f8h + ret +AsmReadMm7 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadMsr64.S b/MdePkg/Library/BaseLib/X64/ReadMsr64.S new file mode 100644 index 0000000000..ac101cd670 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMsr64.S @@ -0,0 +1,38 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadMsr64.S +# +# Abstract: +# +# AsmReadMsr64 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# AsmReadMsr64 ( +# IN UINT32 Index +# ); +#------------------------------------------------------------------------------ +.global _AsmReadMsr64; +.align 16; +_AsmReadMsr64: + rdmsr # edx & eax are zero extended + shl $0x20, %rdx + or %rdx, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadMsr64.asm b/MdePkg/Library/BaseLib/X64/ReadMsr64.asm new file mode 100644 index 0000000000..580c0761a4 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMsr64.asm @@ -0,0 +1,40 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadMsr64.Asm +; +; Abstract: +; +; AsmReadMsr64 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; AsmReadMsr64 ( +; IN UINT32 Index +; ); +;------------------------------------------------------------------------------ +AsmReadMsr64 PROC + rdmsr ; edx & eax are zero extended + shl rdx, 20h + or rax, rdx + ret +AsmReadMsr64 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadMsr64.c b/MdePkg/Library/BaseLib/X64/ReadMsr64.c new file mode 100644 index 0000000000..15a573fc09 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadMsr64.c @@ -0,0 +1,31 @@ +/** @file + CpuBreakpoint function. + + Copyright (c) 2006 - 2007, 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. + +**/ + +// +// Microsoft Visual Studio 7.1 Function Prototypes for I/O Intrinsics +// +unsigned __int64 __readmsr (int register); + +#pragma intrinsic(__readmsr) + + +UINT64 +EFIAPI +AsmReadMsr64 ( + IN UINT32 Index + ) +{ + return __readmsr (Index); +} + diff --git a/MdePkg/Library/BaseLib/X64/ReadPmc.S b/MdePkg/Library/BaseLib/X64/ReadPmc.S new file mode 100644 index 0000000000..115f6335c7 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadPmc.S @@ -0,0 +1,38 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadPmc.S +# +# Abstract: +# +# AsmReadPmc function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# AsmReadPmc ( +# IN UINT32 PmcIndex +# ); +#------------------------------------------------------------------------------ +.global _AsmReadPmc; +.align 16; +_AsmReadPmc: + rdpmc + shl $0x20, %rdx + or %rdx, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadPmc.asm b/MdePkg/Library/BaseLib/X64/ReadPmc.asm new file mode 100644 index 0000000000..5ca60fa85f --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadPmc.asm @@ -0,0 +1,40 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadPmc.Asm +; +; Abstract: +; +; AsmReadPmc function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; AsmReadPmc ( +; IN UINT32 PmcIndex +; ); +;------------------------------------------------------------------------------ +AsmReadPmc PROC + rdpmc + shl rdx, 20h + or rax, rdx + ret +AsmReadPmc ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadSs.S b/MdePkg/Library/BaseLib/X64/ReadSs.S new file mode 100644 index 0000000000..a93a7032cf --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadSs.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadSs.S +# +# Abstract: +# +# AsmReadSs function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT16 +# EFIAPI +# AsmReadSs ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadSs; +.align 16; +_AsmReadSs: + movl %ss, %eax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadSs.asm b/MdePkg/Library/BaseLib/X64/ReadSs.asm new file mode 100644 index 0000000000..2c2be564ac --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadSs.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadSs.Asm +; +; Abstract: +; +; AsmReadSs function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT16 +; EFIAPI +; AsmReadSs ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadSs PROC + mov eax, ss + ret +AsmReadSs ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadTr.S b/MdePkg/Library/BaseLib/X64/ReadTr.S new file mode 100644 index 0000000000..5e3146bf27 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadTr.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadTr.S +# +# Abstract: +# +# AsmReadTr function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT16 +# EFIAPI +# AsmReadTr ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadTr; +.align 16; +_AsmReadTr: + str %eax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadTr.asm b/MdePkg/Library/BaseLib/X64/ReadTr.asm new file mode 100644 index 0000000000..7cf8cdfd43 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadTr.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadTr.Asm +; +; Abstract: +; +; AsmReadTr function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT16 +; EFIAPI +; AsmReadTr ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadTr PROC + str eax + ret +AsmReadTr ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/ReadTsc.S b/MdePkg/Library/BaseLib/X64/ReadTsc.S new file mode 100644 index 0000000000..776ffc2265 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadTsc.S @@ -0,0 +1,38 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ReadTsc.S +# +# Abstract: +# +# AsmReadTsc function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# AsmReadTsc ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmReadTsc; +.align 16; +_AsmReadTsc: + rdtsc + shl $0x20, %rdx + or %rdx, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/ReadTsc.asm b/MdePkg/Library/BaseLib/X64/ReadTsc.asm new file mode 100644 index 0000000000..7c45eebd54 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/ReadTsc.asm @@ -0,0 +1,40 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ReadTsc.Asm +; +; Abstract: +; +; AsmReadTsc function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; AsmReadTsc ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmReadTsc PROC + rdtsc + shl rdx, 20h + or rax, rdx + ret +AsmReadTsc ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/SetJump.S b/MdePkg/Library/BaseLib/X64/SetJump.S new file mode 100644 index 0000000000..eaaa43bf98 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/SetJump.S @@ -0,0 +1,42 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# SetJump.S +# +# Abstract: +# +# Implementation of SetJump() on x86_64 +# +#------------------------------------------------------------------------------ + +.extern InternalAssertJumpBuffer; +.global _SetJump; +_SetJump: + push %rcx + add $0xffffffffffffffe0,%rsp + call _InternalAssertJumpBuffer + add $0x20,%rsp + pop %rcx + pop %rdx + mov %rbx,(%rcx) + mov %rsp,0x8(%rcx) + mov %rbp,0x10(%rcx) + mov %rdi,0x18(%rcx) + mov %rsi,0x20(%rcx) + mov %r12,0x28(%rcx) + mov %r13,0x30(%rcx) + mov %r14,0x38(%rcx) + mov %r15,0x40(%rcx) + mov %rdx,0x48(%rcx) + xor %rax,%rax + jmpq *%rdx diff --git a/MdePkg/Library/BaseLib/X64/SetJump.asm b/MdePkg/Library/BaseLib/X64/SetJump.asm new file mode 100644 index 0000000000..2ed581ea9d --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/SetJump.asm @@ -0,0 +1,54 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; SetJump.Asm +; +; Abstract: +; +; Implementation of SetJump() on x64. +; +;------------------------------------------------------------------------------ + + .code + +EXTERNDEF InternalAssertJumpBuffer:PROC + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; SetJump ( +; OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer +; ); +;------------------------------------------------------------------------------ +SetJump PROC + push rcx + add rsp, -20h + call InternalAssertJumpBuffer + add rsp, 20h + pop rcx + pop rdx + mov [rcx], rbx + mov [rcx + 8], rsp + mov [rcx + 10h], rbp + mov [rcx + 18h], rdi + mov [rcx + 20h], rsi + mov [rcx + 28h], r12 + mov [rcx + 30h], r13 + mov [rcx + 38h], r14 + mov [rcx + 40h], r15 + mov [rcx + 48h], rdx + xor rax, rax + jmp rdx +SetJump ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/SwitchStack.S b/MdePkg/Library/BaseLib/X64/SwitchStack.S new file mode 100644 index 0000000000..85cdb4306d --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/SwitchStack.S @@ -0,0 +1,44 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# SwitchStack.S +# +# Abstract: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Routine Description: +# +# Routine for switching stacks with 1 parameter +# +# Arguments: +# +# (rdi) EntryPoint - Entry point with new stack. +# (rsi) Context1 - Parameter1 for entry point. +# (rdx) Context2 - Parameter2 for entry point. +# (rcx) NewStack - Pointer to new stack. +# +# Returns: +# +# None +# +#------------------------------------------------------------------------------ +.global _InternalSwitchStack; +_InternalSwitchStack: + mov %rcx, %rax + mov %rdx, %rcx + mov %r8, %rdx + lea -0x20(%r9), %rsp + call *%rax diff --git a/MdePkg/Library/BaseLib/X64/SwitchStack.asm b/MdePkg/Library/BaseLib/X64/SwitchStack.asm new file mode 100644 index 0000000000..53d1417f0b --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/SwitchStack.asm @@ -0,0 +1,47 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; SwitchStack.Asm +; +; Abstract: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; Routine Description: +; +; Routine for switching stacks with 1 parameter +; +; Arguments: +; +; (rcx) EntryPoint - Entry point with new stack. +; (rdx) Context - Parameter for entry point. +; (r8) Context2 - Parameter2 for entry point. +; (r9) NewStack - Pointer to new stack. +; +; Returns: +; +; None +; +;------------------------------------------------------------------------------ +InternalSwitchStack PROC + mov rax, rcx + mov rcx, rdx + mov rdx, r8 + lea rsp, [r9 - 20h] + call rax +InternalSwitchStack ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/Thunk16.S b/MdePkg/Library/BaseLib/X64/Thunk16.S new file mode 100644 index 0000000000..e69de29bb2 diff --git a/MdePkg/Library/BaseLib/X64/Thunk16.asm b/MdePkg/Library/BaseLib/X64/Thunk16.asm new file mode 100644 index 0000000000..ef4d9fc997 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/Thunk16.asm @@ -0,0 +1,289 @@ +// +// Include common header file for this module. +// +#include + +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; Thunk.asm +; +; Abstract: +; +; Real mode thunk +; +;------------------------------------------------------------------------------ + +EXTERNDEF m16Start:BYTE +EXTERNDEF m16Size:WORD +EXTERNDEF mThunk16Attr:WORD +EXTERNDEF m16Gdt:WORD +EXTERNDEF m16GdtrBase:WORD +EXTERNDEF mTransition:WORD + +IA32_REGS STRUC 4t +_EDI DD ? +_ESI DD ? +_EBP DD ? +_ESP DD ? +_EBX DD ? +_EDX DD ? +_ECX DD ? +_EAX DD ? +_DS DW ? +_ES DW ? +_FS DW ? +_GS DW ? +_EFLAGS DQ ? +_EIP DD ? +_CS DW ? +_SS DW ? +IA32_REGS ENDS + + .const + +m16Size DW InternalAsmThunk16 - m16Start +mThunk16Attr DW _ThunkAttr - m16Start +m16Gdt DW _NullSeg - m16Start +m16GdtrBase DW _16GdtrBase - m16Start +mTransition DW _EntryPoint - m16Start + + .code + +m16Start LABEL BYTE + +SavedGdt LABEL FWORD + DW ? + DQ ? + +;------------------------------------------------------------------------------ +; _BackFromUserCode() takes control in real mode after 'retf' has been executed +; by user code. It will be shadowed to somewhere in memory below 1MB. +;------------------------------------------------------------------------------ +_BackFromUserCode PROC + ; + ; The order of saved registers on the stack matches the order they appears + ; in IA32_REGS structure. This facilitates wrapper function to extract them + ; into that structure. + ; + ; Some instructions for manipulation of segment registers have to be written + ; in opcode since 64-bit MASM prevents accesses to those registers. + ; + DB 16h ; push ss + DB 0eh ; push cs + DB 66h + call @Base ; push eip +@Base: + DB 66h + push 0 ; reserved high order 32 bits of EFlags + pushf ; pushfd actually + cli ; disable interrupts + push gs + push fs + DB 6 ; push es + DB 1eh ; push ds + DB 66h, 60h ; pushad + DB 66h, 0bah ; mov edx, imm32 +_ThunkAttr DD ? + test dl, THUNK_ATTRIBUTE_DISABLE_A20_MASK_INT_15 + jz @1 + mov eax, 15cd2401h ; mov ax, 2401h & int 15h + cli ; disable interrupts + jnc @2 +@1: + test dl, THUNK_ATTRIBUTE_DISABLE_A20_MASK_KBD_CTRL + jz @2 + in al, 92h + or al, 2 + out 92h, al ; deactivate A20M# +@2: + mov eax, ss + lea bp, [esp + sizeof (IA32_REGS)] + ; + ; rsi in the following 2 instructions is indeed bp in 16-bit code + ; + mov word ptr (IA32_REGS ptr [rsi - sizeof (IA32_REGS)])._ESP, bp + DB 66h + mov ebx, (IA32_REGS ptr [rsi - sizeof (IA32_REGS)])._EIP + shl ax, 4 ; shl eax, 4 + add bp, ax ; add ebp, eax + mov ax, cs + shl ax, 4 + lea ax, [eax + ebx + (@64BitCode - @Base)] + DB 66h, 2eh, 89h, 87h ; mov cs:[bx + (@64Eip - @Base)], eax + DW @64Eip - @Base + DB 66h, 0b8h ; mov eax, imm32 +SavedCr4 DD ? + mov cr4, rax + ; + ; rdi in the instruction below is indeed bx in 16-bit code + ; + DB 66h, 2eh ; 2eh is "cs:" segment override + lgdt fword ptr [rdi + (SavedGdt - @Base)] + DB 66h + mov ecx, 0c0000080h + rdmsr + or ah, 1 + wrmsr + DB 66h, 0b8h ; mov eax, imm32 +SavedCr0 DD ? + mov cr0, rax + DB 66h, 0eah ; jmp far cs:@64Bit +@64Eip DD ? +SavedCs DW ? +@64BitCode: + mov rsp, r8 ; restore stack + ret +_BackFromUserCode ENDP + +_EntryPoint DD _ToUserCode - m16Start + DW CODE16 +_16Gdtr LABEL FWORD + DW GDT_SIZE - 1 +_16GdtrBase DQ _NullSeg +_16Idtr FWORD (1 SHL 10) - 1 + +;------------------------------------------------------------------------------ +; _ToUserCode() takes control in real mode before passing control to user code. +; It will be shadowed to somewhere in memory below 1MB. +;------------------------------------------------------------------------------ +_ToUserCode PROC + mov ss, edx ; set new segment selectors + mov ds, edx + mov es, edx + mov fs, edx + mov gs, edx + DB 66h + mov ecx, 0c0000080h + mov cr0, rax ; real mode starts at next instruction + rdmsr + and ah, NOT 1 + wrmsr + mov cr4, rbp + mov ss, esi ; set up 16-bit stack segment + mov sp, bx ; set up 16-bit stack pointer + DB 66h ; make the following call 32-bit + call @Base ; push eip +@Base: + pop bp ; ebp <- address of @Base + push [esp + sizeof (IA32_REGS) + 2] + lea eax, [rsi + (@RealMode - @Base)] ; rsi is "bp" in 16-bit code + push rax + retf ; execution begins at next instruction +@RealMode: + DB 66h, 2eh ; CS and operand size override + lidt fword ptr [rsi + (_16Idtr - @Base)] + DB 66h, 61h ; popad + DB 1fh ; pop ds + DB 07h ; pop es + pop fs + pop gs + popf ; popfd + lea sp, [esp + 4] ; skip high order 32 bits of EFlags + DB 66h ; make the following retf 32-bit + retf ; transfer control to user code +_ToUserCode ENDP + +CODE16 = _16Code - $ +DATA16 = _16Data - $ +DATA32 = _32Data - $ + +_NullSeg DQ 0 +_16Code LABEL QWORD + DW -1 + DW 0 + DB 0 + DB 9bh + DB 8fh ; 16-bit segment, 4GB limit + DB 0 +_16Data LABEL QWORD + DW -1 + DW 0 + DB 0 + DB 93h + DB 8fh ; 16-bit segment, 4GB limit + DB 0 +_32Data LABEL QWORD + DW -1 + DW 0 + DB 0 + DB 93h + DB 0cfh ; 16-bit segment, 4GB limit + DB 0 + +GDT_SIZE = $ - _NullSeg + +;------------------------------------------------------------------------------ +; IA32_REGISTER_SET * +; EFIAPI +; InternalAsmThunk16 ( +; IN IA32_REGISTER_SET *RegisterSet, +; IN OUT VOID *Transition +; ); +;------------------------------------------------------------------------------ +InternalAsmThunk16 PROC USES rbp rbx rsi rdi + mov r10d, ds ; r9 ~ r11 are not accessible in 16-bit + mov r11d, es ; so use them for saving seg registers + mov r9d, ss + push fs + push gs + mov rsi, rcx + movzx r8d, (IA32_REGS ptr [rsi])._SS + mov edi, (IA32_REGS ptr [rsi])._ESP + lea rdi, [edi - (sizeof (IA32_REGS) + 4)] + imul eax, r8d, 16 ; eax <- r8d(stack segment) * 16 + mov ebx, edi ; ebx <- stack for 16-bit code + push sizeof (IA32_REGS) / 4 + add edi, eax ; edi <- linear address of 16-bit stack + pop rcx + rep movsd ; copy RegSet + lea ecx, [rdx + (SavedCr4 - m16Start)] + mov eax, edx ; eax <- transition code address + and edx, 0fh + shl eax, 12 ; segment address in high order 16 bits + lea ax, [rdx + (_BackFromUserCode - m16Start)] ; offset address + stosd ; [edi] <- return address of user code + sgdt fword ptr [rcx + (SavedGdt - SavedCr4)] + sidt fword ptr [rsp + 38h] ; save IDT stack in argument space + mov rax, cr0 + mov [rcx + (SavedCr0 - SavedCr4)], eax + and eax, 7ffffffeh ; clear PE, PG bits + mov rbp, cr4 + mov [rcx], ebp ; save CR4 in SavedCr4 + and ebp, 300h ; clear all but PCE and OSFXSR bits + mov esi, r8d ; esi <- 16-bit stack segment + DB 6ah, DATA32 ; push DATA32 + pop rdx ; rdx <- 32-bit data segment selector + lgdt fword ptr [rcx + (_16Gdtr - SavedCr4)] + mov ss, edx + pushfq + lea edx, [rdx + DATA16 - DATA32] + lea r8, @RetFromRealMode + push r8 + mov r8d, cs + mov [rcx + (SavedCs - SavedCr4)], r8w + mov r8, rsp + jmp fword ptr [rcx + (_EntryPoint - SavedCr4)] +@RetFromRealMode: + popfq + lidt fword ptr [rsp + 38h] ; restore protected mode IDTR + lea eax, [rbp - sizeof (IA32_REGS)] + pop gs + pop fs + mov ss, r9d + mov es, r11d + mov ds, r10d + ret +InternalAsmThunk16 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/Wbinvd.S b/MdePkg/Library/BaseLib/X64/Wbinvd.S new file mode 100644 index 0000000000..a4b9704d2d --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/Wbinvd.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# Wbinvd.S +# +# Abstract: +# +# AsmWbinvd function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# AsmWbinvd ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _AsmWbinvd; +.align 16; +_AsmWbinvd: + wbinvd + ret diff --git a/MdePkg/Library/BaseLib/X64/Wbinvd.asm b/MdePkg/Library/BaseLib/X64/Wbinvd.asm new file mode 100644 index 0000000000..ca0cb252b3 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/Wbinvd.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; Wbinvd.Asm +; +; Abstract: +; +; AsmWbinvd function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; AsmWbinvd ( +; VOID +; ); +;------------------------------------------------------------------------------ +AsmWbinvd PROC + wbinvd + ret +AsmWbinvd ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteCr0.S b/MdePkg/Library/BaseLib/X64/WriteCr0.S new file mode 100644 index 0000000000..f77dc815bf --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteCr0.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteCr0.S +# +# Abstract: +# +# AsmWriteCr0 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmWriteCr0 ( +# UINTN Cr0 +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteCr0; +_AsmWriteCr0: + mov %rcx,%cr0 + mov %rcx,%rax + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteCr0.asm b/MdePkg/Library/BaseLib/X64/WriteCr0.asm new file mode 100644 index 0000000000..caf1904d2e --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteCr0.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteCr0.Asm +; +; Abstract: +; +; AsmWriteCr0 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmWriteCr0 ( +; UINTN Cr0 +; ); +;------------------------------------------------------------------------------ +AsmWriteCr0 PROC + mov cr0, rcx + mov rax, rcx + ret +AsmWriteCr0 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteCr2.S b/MdePkg/Library/BaseLib/X64/WriteCr2.S new file mode 100644 index 0000000000..66821616e1 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteCr2.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteCr2.S +# +# Abstract: +# +# AsmWriteCr2 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmWriteCr2 ( +# UINTN Cr2 +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteCr2; +_AsmWriteCr0: + mov %rcx,%cr2 + mov %rcx,%rax + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteCr2.asm b/MdePkg/Library/BaseLib/X64/WriteCr2.asm new file mode 100644 index 0000000000..ee5b546262 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteCr2.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteCr2.Asm +; +; Abstract: +; +; AsmWriteCr2 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmWriteCr2 ( +; UINTN Cr2 +; ); +;------------------------------------------------------------------------------ +AsmWriteCr2 PROC + mov cr2, rcx + mov rax, rcx + ret +AsmWriteCr2 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteCr3.S b/MdePkg/Library/BaseLib/X64/WriteCr3.S new file mode 100644 index 0000000000..880ed9737b --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteCr3.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteCr3.S +# +# Abstract: +# +# AsmWriteCr3 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmWriteCr3 ( +# UINTN Cr3 +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteCr3; +_AsmWriteCr3: + mov %rcx,%cr3 + mov %rcx,%rax + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteCr3.asm b/MdePkg/Library/BaseLib/X64/WriteCr3.asm new file mode 100644 index 0000000000..e63229820e --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteCr3.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteCr3.Asm +; +; Abstract: +; +; AsmWriteCr3 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmWriteCr3 ( +; UINTN Cr3 +; ); +;------------------------------------------------------------------------------ +AsmWriteCr3 PROC + mov cr3, rcx + mov rax, rcx + ret +AsmWriteCr3 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteCr4.S b/MdePkg/Library/BaseLib/X64/WriteCr4.S new file mode 100644 index 0000000000..046936352f --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteCr4.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteCr4.S +# +# Abstract: +# +# AsmWriteCr4 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmWriteCr4 ( +# UINTN Cr4 +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteCr4; +_AsmWriteCr4: + mov %rcx,%cr4 + mov %rcx,%rax + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteCr4.asm b/MdePkg/Library/BaseLib/X64/WriteCr4.asm new file mode 100644 index 0000000000..3e79fe23e4 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteCr4.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteCr4.Asm +; +; Abstract: +; +; AsmWriteCr4 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmWriteCr4 ( +; UINTN Cr4 +; ); +;------------------------------------------------------------------------------ +AsmWriteCr4 PROC + mov cr4, rcx + mov rax, rcx + ret +AsmWriteCr4 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteDr0.S b/MdePkg/Library/BaseLib/X64/WriteDr0.S new file mode 100644 index 0000000000..080e56aeb5 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr0.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteDr0.S +# +# Abstract: +# +# AsmWriteDr0 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmWriteDr0 ( +# UINTN Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteDr0; +.align 16; +_AsmWriteDr0: + mov %rcx, %dr0 + mov %rcx, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteDr0.asm b/MdePkg/Library/BaseLib/X64/WriteDr0.asm new file mode 100644 index 0000000000..a1131fead9 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr0.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteDr0.Asm +; +; Abstract: +; +; AsmWriteDr0 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmWriteDr0 ( +; IN UINTN Value +; ); +;------------------------------------------------------------------------------ +AsmWriteDr0 PROC + mov dr0, rcx + mov rax, rcx + ret +AsmWriteDr0 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteDr1.S b/MdePkg/Library/BaseLib/X64/WriteDr1.S new file mode 100644 index 0000000000..af61b68e88 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr1.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteDr1.S +# +# Abstract: +# +# AsmWriteDr1 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmWriteDr1 ( +# UINTN Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteDr1; +.align 16; +_AsmWriteDr1: + mov %rcx, %dr1 + mov %rcx, rax + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteDr1.asm b/MdePkg/Library/BaseLib/X64/WriteDr1.asm new file mode 100644 index 0000000000..366edb6ef8 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr1.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteDr1.Asm +; +; Abstract: +; +; AsmWriteDr1 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmWriteDr1 ( +; IN UINTN Value +; ); +;------------------------------------------------------------------------------ +AsmWriteDr1 PROC + mov dr1, rcx + mov rax, rcx + ret +AsmWriteDr1 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteDr2.S b/MdePkg/Library/BaseLib/X64/WriteDr2.S new file mode 100644 index 0000000000..a9e5369175 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr2.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteDr2.S +# +# Abstract: +# +# AsmWriteDr2 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmWriteDr2 ( +# UINTN Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteDr2; +.align 16; +_AsmWriteDr2: + mov %rcx, %dr2 + mov %rcx, rax + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteDr2.asm b/MdePkg/Library/BaseLib/X64/WriteDr2.asm new file mode 100644 index 0000000000..bde8e3d929 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr2.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteDr2.Asm +; +; Abstract: +; +; AsmWriteDr2 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmWriteDr2 ( +; IN UINTN Value +; ); +;------------------------------------------------------------------------------ +AsmWriteDr2 PROC + mov dr2, rcx + mov rax, rcx + ret +AsmWriteDr2 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteDr3.S b/MdePkg/Library/BaseLib/X64/WriteDr3.S new file mode 100644 index 0000000000..04017cc886 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr3.S @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteDr3.S +# +# Abstract: +# +# AsmWriteDr3 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmWriteDr3 ( +# UINTN Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteDr3; +.align 16; +_AsmWriteDr3: + mov %rcx, %dr3 + mov %rcx, rax + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteDr3.asm b/MdePkg/Library/BaseLib/X64/WriteDr3.asm new file mode 100644 index 0000000000..65180a27d5 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr3.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteDr3.Asm +; +; Abstract: +; +; AsmWriteDr3 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmWriteDr3 ( +; IN UINTN Value +; ); +;------------------------------------------------------------------------------ +AsmWriteDr3 PROC + mov dr3, rcx + mov rax, rcx + ret +AsmWriteDr3 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteDr4.S b/MdePkg/Library/BaseLib/X64/WriteDr4.S new file mode 100644 index 0000000000..b6b4e7821c --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr4.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteDr4.S +# +# Abstract: +# +# AsmWriteDr4 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmWriteDr4 ( +# IN UINTN Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteDr4; +_AsmWriteDr4: + mov %rcx, %dr4 + mov %rcx, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteDr4.asm b/MdePkg/Library/BaseLib/X64/WriteDr4.asm new file mode 100644 index 0000000000..188a9d4ddc --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr4.asm @@ -0,0 +1,43 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteDr4.Asm +; +; Abstract: +; +; AsmWriteDr4 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmWriteDr4 ( +; IN UINTN Value +; ); +;------------------------------------------------------------------------------ +AsmWriteDr4 PROC + ; + ; There's no obvious reason to access this register, since it's aliased to + ; DR6 when DE=0 or an exception generated when DE=1 + ; + DB 0fh, 23h, 0e1h + mov rax, rcx + ret +AsmWriteDr4 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteDr5.S b/MdePkg/Library/BaseLib/X64/WriteDr5.S new file mode 100644 index 0000000000..7539095890 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr5.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteDr5.S +# +# Abstract: +# +# AsmWriteDr5 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmWriteDr5 ( +# IN UINTN Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteDr5; +_AsmWriteDr5: + mov %rcx, %dr5 + mov %rcx, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteDr5.asm b/MdePkg/Library/BaseLib/X64/WriteDr5.asm new file mode 100644 index 0000000000..86009c3287 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr5.asm @@ -0,0 +1,43 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteDr5.Asm +; +; Abstract: +; +; AsmWriteDr5 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmWriteDr6 ( +; IN UINTN Value +; ); +;------------------------------------------------------------------------------ +AsmWriteDr5 PROC + ; + ; There's no obvious reason to access this register, since it's aliased to + ; DR7 when DE=0 or an exception generated when DE=1 + ; + DB 0fh, 23h, 0e9h + mov rax, rcx + ret +AsmWriteDr5 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteDr6.S b/MdePkg/Library/BaseLib/X64/WriteDr6.S new file mode 100644 index 0000000000..862726079e --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr6.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteDr6.S +# +# Abstract: +# +# AsmWriteDr6 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmWriteDr6 ( +# IN UINTN Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteDr6; +_AsmWriteDr6: + mov %rcx, %dr6 + mov %rcx, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteDr6.asm b/MdePkg/Library/BaseLib/X64/WriteDr6.asm new file mode 100644 index 0000000000..f1ddae8bfc --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr6.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteDr6.Asm +; +; Abstract: +; +; AsmWriteDr6 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmWriteDr6 ( +; IN UINTN Value +; ); +;------------------------------------------------------------------------------ +AsmWriteDr6 PROC + mov dr6, rcx + mov rax, rcx + ret +AsmWriteDr6 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteDr7.S b/MdePkg/Library/BaseLib/X64/WriteDr7.S new file mode 100644 index 0000000000..8699d9536f --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr7.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteDr7.S +# +# Abstract: +# +# AsmWriteDr7 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINTN +# EFIAPI +# AsmWriteDr7 ( +# IN UINTN Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteDr7; +_AsmWriteDr7: + mov %rcx, %dr7 + mov %rcx, %rax + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteDr7.asm b/MdePkg/Library/BaseLib/X64/WriteDr7.asm new file mode 100644 index 0000000000..6a0cbfa6ff --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteDr7.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteDr7.Asm +; +; Abstract: +; +; AsmWriteDr7 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; AsmWriteDr7 ( +; IN UINTN Value +; ); +;------------------------------------------------------------------------------ +AsmWriteDr7 PROC + mov dr7, rcx + mov rax, rcx + ret +AsmWriteDr7 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteGdtr.S b/MdePkg/Library/BaseLib/X64/WriteGdtr.S new file mode 100644 index 0000000000..1e9d84b426 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteGdtr.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteGdtr.S +# +# Abstract: +# +# AsmWriteGdtr function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# InternalX86WriteGdtr ( +# IN CONST IA32_DESCRIPTOR *Idtr +# ); +#------------------------------------------------------------------------------ +.global _InternalX86WriteGdtr; +_InternalX86WriteGdtr: + lgdt (%rcx) + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteGdtr.asm b/MdePkg/Library/BaseLib/X64/WriteGdtr.asm new file mode 100644 index 0000000000..fa99a499e7 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteGdtr.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteGdtr.Asm +; +; Abstract: +; +; AsmWriteGdtr function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; InternalX86WriteGdtr ( +; IN CONST IA32_DESCRIPTOR *Idtr +; ); +;------------------------------------------------------------------------------ +InternalX86WriteGdtr PROC + lgdt fword ptr [rcx] + ret +InternalX86WriteGdtr ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteIdtr.S b/MdePkg/Library/BaseLib/X64/WriteIdtr.S new file mode 100644 index 0000000000..feb085ff58 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteIdtr.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteIdtr.S +# +# Abstract: +# +# AsmWriteIdtr function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# InternalX86WriteIdtr ( +# IN CONST IA32_DESCRIPTOR *Idtr +# ); +#------------------------------------------------------------------------------ +.global _InternalX86WriteIdtr; +.align 16; +_InternalX86WriteIdtr: + lidt (%rcx) + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteIdtr.asm b/MdePkg/Library/BaseLib/X64/WriteIdtr.asm new file mode 100644 index 0000000000..2f6c081ab6 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteIdtr.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteIdtr.Asm +; +; Abstract: +; +; AsmWriteIdtr function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; InternalX86WriteIdtr ( +; IN CONST IA32_DESCRIPTOR *Idtr +; ); +;------------------------------------------------------------------------------ +InternalX86WriteIdtr PROC + lidt fword ptr [rcx] + ret +InternalX86WriteIdtr ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteLdtr.S b/MdePkg/Library/BaseLib/X64/WriteLdtr.S new file mode 100644 index 0000000000..c07ab831f9 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteLdtr.S @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteLdtr.S +# +# Abstract: +# +# AsmWriteLdtr function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# AsmWriteLdtr ( +# IN UINT16 Ldtr +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteLdtr; +.align 16; +_AsmWriteLdtr: + lldt %cx + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteLdtr.asm b/MdePkg/Library/BaseLib/X64/WriteLdtr.asm new file mode 100644 index 0000000000..d85ae38f29 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteLdtr.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteLdtr.Asm +; +; Abstract: +; +; AsmWriteLdtr function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; AsmWriteLdtr ( +; IN UINT16 Ldtr +; ); +;------------------------------------------------------------------------------ +AsmWriteLdtr PROC + lldt cx + ret +AsmWriteLdtr ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteMm0.S b/MdePkg/Library/BaseLib/X64/WriteMm0.S new file mode 100644 index 0000000000..2d805a14dc --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm0.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteMm0.S +# +# Abstract: +# +# AsmWriteMm0 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# AsmWriteMm0 ( +# IN UINT64 Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteMm0; +_AsmWriteMm0: + movd %rcx, %xmm0 + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteMm0.asm b/MdePkg/Library/BaseLib/X64/WriteMm0.asm new file mode 100644 index 0000000000..7496362d86 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm0.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteMm0.Asm +; +; Abstract: +; +; AsmWriteMm0 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; AsmWriteMm0 ( +; IN UINT64 Value +; ); +;------------------------------------------------------------------------------ +AsmWriteMm0 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 6eh, 0c1h + ret +AsmWriteMm0 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteMm1.S b/MdePkg/Library/BaseLib/X64/WriteMm1.S new file mode 100644 index 0000000000..ff8162e727 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm1.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteMm1.S +# +# Abstract: +# +# AsmWriteMm1 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# AsmWriteMm1 ( +# IN UINT64 Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteMm1; +_AsmWriteMm1: + movd %rcx, %mm1 + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteMm1.asm b/MdePkg/Library/BaseLib/X64/WriteMm1.asm new file mode 100644 index 0000000000..a00f551f8a --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm1.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteMm1.Asm +; +; Abstract: +; +; AsmWriteMm1 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; AsmWriteMm1 ( +; IN UINT64 Value +; ); +;------------------------------------------------------------------------------ +AsmWriteMm1 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 6eh, 0c9h + ret +AsmWriteMm1 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteMm2.S b/MdePkg/Library/BaseLib/X64/WriteMm2.S new file mode 100644 index 0000000000..a98e73650c --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm2.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteMm2.S +# +# Abstract: +# +# AsmWriteMm2 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# AsmWriteMm2 ( +# IN UINT64 Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteMm2; +_AsmWriteMm2: + movd %rcx, %mm2 + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteMm2.asm b/MdePkg/Library/BaseLib/X64/WriteMm2.asm new file mode 100644 index 0000000000..01db79007d --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm2.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteMm2.Asm +; +; Abstract: +; +; AsmWriteMm2 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; AsmWriteMm2 ( +; IN UINT64 Value +; ); +;------------------------------------------------------------------------------ +AsmWriteMm2 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 6eh, 0d1h + ret +AsmWriteMm2 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteMm3.S b/MdePkg/Library/BaseLib/X64/WriteMm3.S new file mode 100644 index 0000000000..81561e3594 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm3.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteMm3.S +# +# Abstract: +# +# AsmWriteMm3 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# AsmWriteMm3 ( +# IN UINT64 Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteMm3; +_AsmWriteMm3: + movd %rcx, %mm3 + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteMm3.asm b/MdePkg/Library/BaseLib/X64/WriteMm3.asm new file mode 100644 index 0000000000..59464641eb --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm3.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteMm3.Asm +; +; Abstract: +; +; AsmWriteMm3 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; AsmWriteMm3 ( +; IN UINT64 Value +; ); +;------------------------------------------------------------------------------ +AsmWriteMm3 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 6eh, 0d9h + ret +AsmWriteMm3 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteMm4.S b/MdePkg/Library/BaseLib/X64/WriteMm4.S new file mode 100644 index 0000000000..124d946dde --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm4.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteMm4.S +# +# Abstract: +# +# AsmWriteMm4 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# AsmWriteMm4 ( +# IN UINT64 Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteMm4; +_AsmWriteMm4: + movd %rcx, %mm4 + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteMm4.asm b/MdePkg/Library/BaseLib/X64/WriteMm4.asm new file mode 100644 index 0000000000..6848dbf7ec --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm4.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteMm4.Asm +; +; Abstract: +; +; AsmWriteMm4 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; AsmWriteMm4 ( +; IN UINT64 Value +; ); +;------------------------------------------------------------------------------ +AsmWriteMm4 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 6eh, 0e1h + ret +AsmWriteMm4 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteMm5.S b/MdePkg/Library/BaseLib/X64/WriteMm5.S new file mode 100644 index 0000000000..0935ddc0b1 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm5.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteMm5.S +# +# Abstract: +# +# AsmWriteMm5 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# AsmWriteMm5 ( +# IN UINT64 Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteMm5; +_AsmWriteMm5: + movd %rcx, %mm5 + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteMm5.asm b/MdePkg/Library/BaseLib/X64/WriteMm5.asm new file mode 100644 index 0000000000..fbe44ae078 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm5.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteMm5.Asm +; +; Abstract: +; +; AsmWriteMm5 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; AsmWriteMm5 ( +; IN UINT64 Value +; ); +;------------------------------------------------------------------------------ +AsmWriteMm5 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 6eh, 0e9h + ret +AsmWriteMm5 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteMm6.S b/MdePkg/Library/BaseLib/X64/WriteMm6.S new file mode 100644 index 0000000000..02b50cf055 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm6.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteMm6.S +# +# Abstract: +# +# AsmWriteMm6 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# AsmWriteMm6 ( +# IN UINT64 Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteMm6; +_AsmWriteMm6: + movd %rcx, %mm6 + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteMm6.asm b/MdePkg/Library/BaseLib/X64/WriteMm6.asm new file mode 100644 index 0000000000..cd5938828d --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm6.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteMm6.Asm +; +; Abstract: +; +; AsmWriteMm6 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; AsmWriteMm6 ( +; IN UINT64 Value +; ); +;------------------------------------------------------------------------------ +AsmWriteMm6 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 6eh, 0f1h + ret +AsmWriteMm6 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteMm7.S b/MdePkg/Library/BaseLib/X64/WriteMm7.S new file mode 100644 index 0000000000..60292721e8 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm7.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteMm7.S +# +# Abstract: +# +# AsmWriteMm7 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# AsmWriteMm7 ( +# IN UINT64 Value +# ); +#------------------------------------------------------------------------------ +.global _AsmWriteMm7; +_AsmWriteMm7: + movd %rcx, %mm7 + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteMm7.asm b/MdePkg/Library/BaseLib/X64/WriteMm7.asm new file mode 100644 index 0000000000..9636a4cd8d --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMm7.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteMm7.Asm +; +; Abstract: +; +; AsmWriteMm7 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; AsmWriteMm7 ( +; IN UINT64 Value +; ); +;------------------------------------------------------------------------------ +AsmWriteMm7 PROC + ; + ; 64-bit MASM doesn't support MMX instructions, so use opcode here + ; + DB 48h, 0fh, 6eh, 0f9h + ret +AsmWriteMm7 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteMsr64.S b/MdePkg/Library/BaseLib/X64/WriteMsr64.S new file mode 100644 index 0000000000..88ff48bf26 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMsr64.S @@ -0,0 +1,40 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# WriteMsr64.S +# +# Abstract: +# +# AsmWriteMsr64 function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# UINT64 +# EFIAPI +# AsmWriteMsr64 ( +# IN UINT32 Index, +# IN UINT64 Value +# ); +# TODO: +#------------------------------------------------------------------------------ +.global _AsmWriteMsr64; +.align 16; +_AsmWriteMsr64: + mov %rdx, %rax + shr $0x20, %rdx + wrmsr + ret diff --git a/MdePkg/Library/BaseLib/X64/WriteMsr64.asm b/MdePkg/Library/BaseLib/X64/WriteMsr64.asm new file mode 100644 index 0000000000..b7704b8185 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMsr64.asm @@ -0,0 +1,41 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; WriteMsr64.Asm +; +; Abstract: +; +; AsmWriteMsr64 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; UINT64 +; EFIAPI +; AsmWriteMsr64 ( +; IN UINT32 Index, +; IN UINT64 Value +; ); +;------------------------------------------------------------------------------ +AsmWriteMsr64 PROC + mov rax, rdx ; meanwhile, rax <- return value + shr rdx, 20h ; edx:eax contains the value to write + wrmsr + ret +AsmWriteMsr64 ENDP + + END diff --git a/MdePkg/Library/BaseLib/X64/WriteMsr64.c b/MdePkg/Library/BaseLib/X64/WriteMsr64.c new file mode 100644 index 0000000000..1d1e0bc332 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/WriteMsr64.c @@ -0,0 +1,32 @@ +/** @file + CpuBreakpoint function. + + Copyright (c) 2006 - 2007, 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. + +**/ + +// +// Microsoft Visual Studio 7.1 Function Prototypes for I/O Intrinsics +// +void __writemsr (unsigned long Register, unsigned __int64 Value); + +#pragma intrinsic(__writemsr) + +UINT64 +EFIAPI +AsmWriteMsr64 ( + IN UINT32 Index, + IN UINT64 Value + ) +{ + __writemsr (Index, Value); + return Value; +} + diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.S index 3968604ca6..725367b2f9 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.S +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.S @@ -1,58 +1,53 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# CompareMem.Asm -# -# Abstract: -# -# CompareMem function -# -# Notes: -# -# The following BaseMemoryLib instances share the same version of this file: -# -# BaseMemoryLibRepStr -# BaseMemoryLibMmx -# BaseMemoryLibSse2 -# -#------------------------------------------------------------------------------ - -.globl _InternalMemCompareMem - -#------------------------------------------------------------------------------ -# INTN -# EFIAPI -# InternalMemCompareMem ( -# IN CONST VOID *DestinationBuffer, -# IN CONST VOID *SourceBuffer, -# IN UINTN Length -# ); -#------------------------------------------------------------------------------ -_InternalMemCompareMem: - push %esi - push %edi - movl 12(%esp), %esi - movl 16(%esp), %edi - movl 20(%esp), %ecx - repe cmpsb - movzbl -1(%esi), %eax - movzbl -1(%edi), %edx - subl %edx, %eax - pop %edi - pop %esi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# CompareMem.Asm +# +# Abstract: +# +# CompareMem function +# +# Notes: +# +# The following BaseMemoryLib instances share the same version of this file: +# +# BaseMemoryLibRepStr +# BaseMemoryLibMmx +# BaseMemoryLibSse2 +# +#------------------------------------------------------------------------------ + +.globl _InternalMemCompareMem + +#------------------------------------------------------------------------------ +# INTN +# EFIAPI +# InternalMemCompareMem ( +# IN CONST VOID *DestinationBuffer, +# IN CONST VOID *SourceBuffer, +# IN UINTN Length +# ); +#------------------------------------------------------------------------------ +_InternalMemCompareMem: + push %esi + push %edi + movl 12(%esp), %esi + movl 16(%esp), %edi + movl 20(%esp), %ecx + repe cmpsb + movzbl -1(%esi), %eax + movzbl -1(%edi), %edx + subl %edx, %eax + pop %edi + pop %esi + ret diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.asm b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.asm index 2509e40bd8..1d0e7fad39 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.asm +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CompareMem.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.S index a83fc04634..a95b33759c 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.S +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.S @@ -1,70 +1,65 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# CopyMem.Asm -# -# Abstract: -# -# CopyMem function -# -# Notes: -# -#------------------------------------------------------------------------------ - -.globl _InternalMemCopyMem - -#------------------------------------------------------------------------------ -# VOID * -# EFIAPI -# InternalMemCopyMem ( -# IN VOID *Destination, -# IN VOID *Source, -# IN UINTN Count -# ); -#------------------------------------------------------------------------------ -_InternalMemCopyMem: - push %esi - push %edi - movl 16(%esp), %esi # esi <- Source - movl 12(%esp), %edi # edi <- Destination - movl 20(%esp), %edx # edx <- Count - leal -1(%esi, %edx), %eax # eax <- End of Source - cmpl %edi, %esi - jae L0 - cmpl %edi, %eax - jae L_CopyBackward # Copy backward if overlapped -L0: - movl %edx, %ecx - andl $3, %edx - shrl $2, %ecx - rep - movsl # Copy as many Dwords as possible - jmp L_CopyBytes -L_CopyBackward: - movl %eax, %esi # esi <- End of Source - leal -1(%edi, %edx), %edi # edi <- End of Destination - std -L_CopyBytes: - movl %edx, %ecx - rep - movsb # Copy bytes backward - cld - movl 12(%esp), %eax # eax <- Destination as return value - pop %edi - pop %esi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# CopyMem.Asm +# +# Abstract: +# +# CopyMem function +# +# Notes: +# +#------------------------------------------------------------------------------ + +.globl _InternalMemCopyMem + +#------------------------------------------------------------------------------ +# VOID * +# EFIAPI +# InternalMemCopyMem ( +# IN VOID *Destination, +# IN VOID *Source, +# IN UINTN Count +# ); +#------------------------------------------------------------------------------ +_InternalMemCopyMem: + push %esi + push %edi + movl 16(%esp), %esi # esi <- Source + movl 12(%esp), %edi # edi <- Destination + movl 20(%esp), %edx # edx <- Count + leal -1(%esi, %edx), %eax # eax <- End of Source + cmpl %edi, %esi + jae L0 + cmpl %edi, %eax + jae L_CopyBackward # Copy backward if overlapped +L0: + movl %edx, %ecx + andl $3, %edx + shrl $2, %ecx + rep + movsl # Copy as many Dwords as possible + jmp L_CopyBytes +L_CopyBackward: + movl %eax, %esi # esi <- End of Source + leal -1(%edi, %edx), %edi # edi <- End of Destination + std +L_CopyBytes: + movl %edx, %ecx + rep + movsb # Copy bytes backward + cld + movl 12(%esp), %eax # eax <- Destination as return value + pop %edi + pop %esi + ret diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.asm b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.asm index 8b4366e976..86677ef614 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.asm +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/CopyMem.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.S index 276b4ff29f..5e65b9667a 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.S +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.S @@ -1,55 +1,50 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# ScanMem16.Asm -# -# Abstract: -# -# ScanMem16 function -# -# Notes: -# -# The following BaseMemoryLib instances share the same version of this file: -# -# BaseMemoryLibRepStr -# BaseMemoryLibMmx -# BaseMemoryLibSse2 -# -#------------------------------------------------------------------------------ - -.globl _InternalMemScanMem16 - -#------------------------------------------------------------------------------ -# CONST VOID * -# EFIAPI -# InternalMemScanMem16 ( -# IN CONST VOID *Buffer, -# IN UINTN Length, -# IN UINT16 Value -# ); -#------------------------------------------------------------------------------ -_InternalMemScanMem16: - push %edi - movl 12(%esp), %ecx - movl 8(%esp), %edi - movl 16(%esp), %eax - repne scasw - leal -2(%edi), %eax - cmovnz %ecx, %eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ScanMem16.Asm +# +# Abstract: +# +# ScanMem16 function +# +# Notes: +# +# The following BaseMemoryLib instances share the same version of this file: +# +# BaseMemoryLibRepStr +# BaseMemoryLibMmx +# BaseMemoryLibSse2 +# +#------------------------------------------------------------------------------ + +.globl _InternalMemScanMem16 + +#------------------------------------------------------------------------------ +# CONST VOID * +# EFIAPI +# InternalMemScanMem16 ( +# IN CONST VOID *Buffer, +# IN UINTN Length, +# IN UINT16 Value +# ); +#------------------------------------------------------------------------------ +_InternalMemScanMem16: + push %edi + movl 12(%esp), %ecx + movl 8(%esp), %edi + movl 16(%esp), %eax + repne scasw + leal -2(%edi), %eax + cmovnz %ecx, %eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.asm b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.asm index 6b5c81f556..57fab61b77 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.asm +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem16.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.S index fced1b2362..5d46ed2bc1 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.S +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.S @@ -1,55 +1,50 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# ScanMem32.Asm -# -# Abstract: -# -# ScanMem32 function -# -# Notes: -# -# The following BaseMemoryLib instances share the same version of this file: -# -# BaseMemoryLibRepStr -# BaseMemoryLibMmx -# BaseMemoryLibSse2 -# -#------------------------------------------------------------------------------ - -.globl _InternalMemScanMem32 - -#------------------------------------------------------------------------------ -# CONST VOID * -# EFIAPI -# InternalMemScanMem32 ( -# IN CONST VOID *Buffer, -# IN UINTN Length, -# IN UINT32 Value -# ); -#------------------------------------------------------------------------------ -_InternalMemScanMem32: - push %edi - movl 12(%esp), %ecx - movl 8(%esp), %edi - movl 16(%esp), %eax - repne scasl - leal -4(%edi), %eax - cmovnz %ecx, %eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ScanMem32.Asm +# +# Abstract: +# +# ScanMem32 function +# +# Notes: +# +# The following BaseMemoryLib instances share the same version of this file: +# +# BaseMemoryLibRepStr +# BaseMemoryLibMmx +# BaseMemoryLibSse2 +# +#------------------------------------------------------------------------------ + +.globl _InternalMemScanMem32 + +#------------------------------------------------------------------------------ +# CONST VOID * +# EFIAPI +# InternalMemScanMem32 ( +# IN CONST VOID *Buffer, +# IN UINTN Length, +# IN UINT32 Value +# ); +#------------------------------------------------------------------------------ +_InternalMemScanMem32: + push %edi + movl 12(%esp), %ecx + movl 8(%esp), %edi + movl 16(%esp), %eax + repne scasl + leal -4(%edi), %eax + cmovnz %ecx, %eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.asm b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.asm index cb0feed6be..6ac857ce16 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.asm +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem32.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.S index 37dc3bbf67..3ba69650ab 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.S +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.S @@ -1,64 +1,59 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# ScanMem64.Asm -# -# Abstract: -# -# ScanMem64 function -# -# Notes: -# -# The following BaseMemoryLib instances share the same version of this file: -# -# BaseMemoryLibRepStr -# BaseMemoryLibMmx -# BaseMemoryLibSse2 -# -#------------------------------------------------------------------------------ - -.globl _InternalMemScanMem64 - -#------------------------------------------------------------------------------ -# CONST VOID * -# EFIAPI -# InternalMemScanMem64 ( -# IN CONST VOID *Buffer, -# IN UINTN Length, -# IN UINT64 Value -# ); -#------------------------------------------------------------------------------ -_InternalMemScanMem64: - push %edi - movl 12(%esp), %ecx - movl 16(%esp), %eax - movl 20(%esp), %edx - movl 8(%esp), %edi -L0: - cmpl (%edi), %eax - leal 8(%edi), %edi - loopne L0 - jne L1 - cmpl -4(%edi), %edx - jecxz L1 - jne L0 -L1: - leal -8(%edi), %eax - cmovne %ecx, %eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ScanMem64.Asm +# +# Abstract: +# +# ScanMem64 function +# +# Notes: +# +# The following BaseMemoryLib instances share the same version of this file: +# +# BaseMemoryLibRepStr +# BaseMemoryLibMmx +# BaseMemoryLibSse2 +# +#------------------------------------------------------------------------------ + +.globl _InternalMemScanMem64 + +#------------------------------------------------------------------------------ +# CONST VOID * +# EFIAPI +# InternalMemScanMem64 ( +# IN CONST VOID *Buffer, +# IN UINTN Length, +# IN UINT64 Value +# ); +#------------------------------------------------------------------------------ +_InternalMemScanMem64: + push %edi + movl 12(%esp), %ecx + movl 16(%esp), %eax + movl 20(%esp), %edx + movl 8(%esp), %edi +L0: + cmpl (%edi), %eax + leal 8(%edi), %edi + loopne L0 + jne L1 + cmpl -4(%edi), %edx + jecxz L1 + jne L0 +L1: + leal -8(%edi), %eax + cmovne %ecx, %eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.asm b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.asm index ee0deddc61..ca54f13738 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.asm +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem64.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.S index e7d2a26cad..7a834a5635 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.S +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.S @@ -1,55 +1,50 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# ScanMem8.Asm -# -# Abstract: -# -# ScanMem8 function -# -# Notes: -# -# The following BaseMemoryLib instances share the same version of this file: -# -# BaseMemoryLibRepStr -# BaseMemoryLibMmx -# BaseMemoryLibSse2 -# -#------------------------------------------------------------------------------ - -.globl _InternalMemScanMem8 - -#------------------------------------------------------------------------------ -# CONST VOID * -# EFIAPI -# InternalMemScanMem8 ( -# IN CONST VOID *Buffer, -# IN UINTN Length, -# IN UINT8 Value -# ); -#------------------------------------------------------------------------------ -_InternalMemScanMem8: - push %edi - movl 12(%esp), %ecx - movl 8(%esp), %edi - movb 16(%esp), %al - repne scasb - leal -1(%edi), %eax - cmovnz %ecx, %eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ScanMem8.Asm +# +# Abstract: +# +# ScanMem8 function +# +# Notes: +# +# The following BaseMemoryLib instances share the same version of this file: +# +# BaseMemoryLibRepStr +# BaseMemoryLibMmx +# BaseMemoryLibSse2 +# +#------------------------------------------------------------------------------ + +.globl _InternalMemScanMem8 + +#------------------------------------------------------------------------------ +# CONST VOID * +# EFIAPI +# InternalMemScanMem8 ( +# IN CONST VOID *Buffer, +# IN UINTN Length, +# IN UINT8 Value +# ); +#------------------------------------------------------------------------------ +_InternalMemScanMem8: + push %edi + movl 12(%esp), %ecx + movl 8(%esp), %edi + movb 16(%esp), %al + repne scasb + leal -1(%edi), %eax + cmovnz %ecx, %eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.asm b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.asm index 97d201abb5..a3f65b64fa 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.asm +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ScanMem8.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.S index 46029950be..4ddf6c490b 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.S +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.S @@ -1,51 +1,46 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# SetMem.Asm -# -# Abstract: -# -# SetMem function -# -# Notes: -# -#------------------------------------------------------------------------------ - - .386: - .code: - -.globl _InternalMemSetMem - -#------------------------------------------------------------------------------ -# VOID * -# InternalMemSetMem ( -# IN VOID *Buffer, -# IN UINTN Count, -# IN UINT8 Value -# ) -#------------------------------------------------------------------------------ -_InternalMemSetMem: - push %edi - movl 16(%esp),%eax - movl 8(%esp),%edi - movl 12(%esp),%ecx - rep - stosb - movl 8(%esp),%eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# SetMem.Asm +# +# Abstract: +# +# SetMem function +# +# Notes: +# +#------------------------------------------------------------------------------ + + .386: + .code: + +.globl _InternalMemSetMem + +#------------------------------------------------------------------------------ +# VOID * +# InternalMemSetMem ( +# IN VOID *Buffer, +# IN UINTN Count, +# IN UINT8 Value +# ) +#------------------------------------------------------------------------------ +_InternalMemSetMem: + push %edi + movl 16(%esp),%eax + movl 8(%esp),%edi + movl 12(%esp),%ecx + rep + stosb + movl 8(%esp),%eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.asm b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.asm index b48cffc1ee..98b1ed84c2 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.asm +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.S index ff62e947a4..6e7c136222 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.S +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.S @@ -1,48 +1,43 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# SetMem16.Asm -# -# Abstract: -# -# SetMem16 function -# -# Notes: -# -#------------------------------------------------------------------------------ - -.globl _InternalMemSetMem16 - -#------------------------------------------------------------------------------ -# VOID * -# InternalMemSetMem16 ( -# IN VOID *Buffer, -# IN UINTN Count, -# IN UINT16 Value -# ) -#------------------------------------------------------------------------------ -_InternalMemSetMem16: - push %edi - movl 16(%esp), %eax - movl 8(%esp), %edi - movl 12(%esp), %ecx - rep - stosw - movl 8(%esp), %eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# SetMem16.Asm +# +# Abstract: +# +# SetMem16 function +# +# Notes: +# +#------------------------------------------------------------------------------ + +.globl _InternalMemSetMem16 + +#------------------------------------------------------------------------------ +# VOID * +# InternalMemSetMem16 ( +# IN VOID *Buffer, +# IN UINTN Count, +# IN UINT16 Value +# ) +#------------------------------------------------------------------------------ +_InternalMemSetMem16: + push %edi + movl 16(%esp), %eax + movl 8(%esp), %edi + movl 12(%esp), %ecx + rep + stosw + movl 8(%esp), %eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.asm b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.asm index 1319614d51..7f4a8955f9 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.asm +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem16.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.S index 8b94d563af..455af20573 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.S +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.S @@ -1,48 +1,43 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# SetMem32.Asm -# -# Abstract: -# -# SetMem32 function -# -# Notes: -# -#------------------------------------------------------------------------------ - -.globl _InternalMemSetMem32 - -#------------------------------------------------------------------------------ -# VOID * -# InternalMemSetMem32 ( -# IN VOID *Buffer, -# IN UINTN Count, -# IN UINT32 Value -# ) -#------------------------------------------------------------------------------ -_InternalMemSetMem32: - push %edi - movl 16(%esp),%eax - movl 8(%esp),%edi - movl 12(%esp),%ecx - rep - stosl - movl 8(%esp),%eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# SetMem32.Asm +# +# Abstract: +# +# SetMem32 function +# +# Notes: +# +#------------------------------------------------------------------------------ + +.globl _InternalMemSetMem32 + +#------------------------------------------------------------------------------ +# VOID * +# InternalMemSetMem32 ( +# IN VOID *Buffer, +# IN UINTN Count, +# IN UINT32 Value +# ) +#------------------------------------------------------------------------------ +_InternalMemSetMem32: + push %edi + movl 16(%esp),%eax + movl 8(%esp),%edi + movl 12(%esp),%ecx + rep + stosl + movl 8(%esp),%eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.asm b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.asm index 34f4b8e5d7..5876f4a741 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.asm +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem32.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.S index 68418cca6c..b4afff0fd4 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.S +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.S @@ -1,51 +1,46 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# SetMem64.Asm -# -# Abstract: -# -# SetMem64 function -# -# Notes: -# -#------------------------------------------------------------------------------ - -.globl _InternalMemSetMem64 - -#------------------------------------------------------------------------------ -# VOID * -# InternalMemSetMem64 ( -# IN VOID *Buffer, -# IN UINTN Count, -# IN UINT64 Value -# ) -#------------------------------------------------------------------------------ -_InternalMemSetMem64: - push %edi - movl 12(%esp), %ecx - movl 16(%esp), %eax - movl 20(%esp), %edx - movl 8(%esp), %edi -L0: - mov %eax, -8(%edi, %ecx, 8) - mov %edx, -4(%edi, %ecx, 8) - loop L0 - movl %edi, %eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# SetMem64.Asm +# +# Abstract: +# +# SetMem64 function +# +# Notes: +# +#------------------------------------------------------------------------------ + +.globl _InternalMemSetMem64 + +#------------------------------------------------------------------------------ +# VOID * +# InternalMemSetMem64 ( +# IN VOID *Buffer, +# IN UINTN Count, +# IN UINT64 Value +# ) +#------------------------------------------------------------------------------ +_InternalMemSetMem64: + push %edi + movl 12(%esp), %ecx + movl 16(%esp), %eax + movl 20(%esp), %edx + movl 8(%esp), %edi +L0: + mov %eax, -8(%edi, %ecx, 8) + mov %edx, -4(%edi, %ecx, 8) + loop L0 + movl %edi, %eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.asm b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.asm index 3aa24ef7e4..687c18f312 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.asm +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/SetMem64.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.S b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.S index 9551c1a4a6..8465d7cf65 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.S +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.S @@ -1,54 +1,49 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# ZeroMem.Asm -# -# Abstract: -# -# ZeroMem function -# -# Notes: -# -#------------------------------------------------------------------------------ - -.globl _InternalMemZeroMem - -#------------------------------------------------------------------------------ -# VOID * -# InternalMemZeroMem ( -# IN VOID *Buffer, -# IN UINTN Count -# ); -#------------------------------------------------------------------------------ -_InternalMemZeroMem: - push %edi - xorl %eax,%eax - movl 8(%esp),%edi - movl 12(%esp),%ecx - movl %ecx,%edx - shrl $2,%ecx - andl $3,%edx - pushl %edi - rep - stosl - movl %edx,%ecx - rep - stosb - popl %eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ZeroMem.Asm +# +# Abstract: +# +# ZeroMem function +# +# Notes: +# +#------------------------------------------------------------------------------ + +.globl _InternalMemZeroMem + +#------------------------------------------------------------------------------ +# VOID * +# InternalMemZeroMem ( +# IN VOID *Buffer, +# IN UINTN Count +# ); +#------------------------------------------------------------------------------ +_InternalMemZeroMem: + push %edi + xorl %eax,%eax + movl 8(%esp),%edi + movl 12(%esp),%ecx + movl %ecx,%edx + shrl $2,%ecx + andl $3,%edx + pushl %edi + rep + stosl + movl %edx,%ecx + rep + stosb + popl %eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.asm b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.asm index fe569250ae..b3b8b5d1f1 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.asm +++ b/MdePkg/Library/BaseMemoryLibRepStr/Ia32/ZeroMem.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibRepStr/x64/CompareMem.asm b/MdePkg/Library/BaseMemoryLibRepStr/x64/CompareMem.asm new file mode 100644 index 0000000000..554bc07c64 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/x64/CompareMem.asm @@ -0,0 +1,52 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; CompareMem.Asm +; +; Abstract: +; +; CompareMem function +; +; Notes: +; +; The following BaseMemoryLib instances share the same version of this file: +; +; BaseMemoryLibRepStr +; BaseMemoryLibMmx +; BaseMemoryLibSse2 +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; INTN +; EFIAPI +; InternalMemCompareMem ( +; IN CONST VOID *DestinationBuffer, +; IN CONST VOID *SourceBuffer, +; IN UINTN Length +; ); +;------------------------------------------------------------------------------ +InternalMemCompareMem PROC USES rsi rdi + mov rsi, rcx + mov rdi, rdx + mov rcx, r8 + repe cmpsb + movzx rax, byte ptr [rsi - 1] + movzx rdx, byte ptr [rdi - 1] + sub rax, rdx + ret +InternalMemCompareMem ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibRepStr/x64/CopyMem.asm b/MdePkg/Library/BaseMemoryLibRepStr/x64/CopyMem.asm new file mode 100644 index 0000000000..a2e04056fd --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/x64/CopyMem.asm @@ -0,0 +1,61 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; CopyMem.Asm +; +; Abstract: +; +; CopyMem function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; EFIAPI +; InternalMemCopyMem ( +; IN VOID *Destination, +; IN VOID *Source, +; IN UINTN Count +; ) +;------------------------------------------------------------------------------ +InternalMemCopyMem PROC USES rsi rdi + mov rsi, rdx ; rsi <- Source + mov rdi, rcx ; rdi <- Destination + lea r9, [rsi + r8 - 1] ; r9 <- End of Source + cmp rsi, rdi + mov rax, rdi ; rax <- Destination as return value + jae @F + cmp r9, rsi + jae @CopyBackward ; Copy backward if overlapped +@@: + mov rcx, r8 + and r8, 7 + shr rcx, 3 + rep movsq ; Copy as many Qwords as possible + jmp @CopyBytes +@CopyBackward: + mov rsi, r9 ; rsi <- End of Source + lea rdi, [rdi + r8 - 1] ; esi <- End of Destination + std ; set direction flag +@CopyBytes: + mov rcx, r8 + rep movsb ; Copy bytes backward + cld + ret +InternalMemCopyMem ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem16.asm b/MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem16.asm new file mode 100644 index 0000000000..a2538c2cca --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem16.asm @@ -0,0 +1,51 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ScanMem16.Asm +; +; Abstract: +; +; ScanMem16 function +; +; Notes: +; +; The following BaseMemoryLib instances share the same version of this file: +; +; BaseMemoryLibRepStr +; BaseMemoryLibMmx +; BaseMemoryLibSse2 +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; CONST VOID * +; EFIAPI +; InternalMemScanMem16 ( +; IN CONST VOID *Buffer, +; IN UINTN Length, +; IN UINT16 Value +; ); +;------------------------------------------------------------------------------ +InternalMemScanMem16 PROC USES rdi + mov rdi, rcx + mov rax, r8 + mov rcx, rdx + repne scasw + lea rax, [rdi - 2] + cmovnz rax, rcx + ret +InternalMemScanMem16 ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem32.asm b/MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem32.asm new file mode 100644 index 0000000000..e0523d8547 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem32.asm @@ -0,0 +1,51 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ScanMem32.Asm +; +; Abstract: +; +; ScanMem32 function +; +; Notes: +; +; The following BaseMemoryLib instances share the same version of this file: +; +; BaseMemoryLibRepStr +; BaseMemoryLibMmx +; BaseMemoryLibSse2 +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; CONST VOID * +; EFIAPI +; InternalMemScanMem32 ( +; IN CONST VOID *Buffer, +; IN UINTN Length, +; IN UINT32 Value +; ); +;------------------------------------------------------------------------------ +InternalMemScanMem32 PROC USES rdi + mov rdi, rcx + mov rax, r8 + mov rcx, rdx + repne scasd + lea rax, [rdi - 4] + cmovnz rax, rcx + ret +InternalMemScanMem32 ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem64.asm b/MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem64.asm new file mode 100644 index 0000000000..0e7e9c782f --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem64.asm @@ -0,0 +1,51 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ScanMem64.Asm +; +; Abstract: +; +; ScanMem64 function +; +; Notes: +; +; The following BaseMemoryLib instances share the same version of this file: +; +; BaseMemoryLibRepStr +; BaseMemoryLibMmx +; BaseMemoryLibSse2 +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; CONST VOID * +; EFIAPI +; InternalMemScanMem64 ( +; IN CONST VOID *Buffer, +; IN UINTN Length, +; IN UINT64 Value +; ); +;------------------------------------------------------------------------------ +InternalMemScanMem64 PROC USES rdi + mov rdi, rcx + mov rax, r8 + mov rcx, rdx + repne scasq + lea rax, [rdi - 8] + cmovnz rax, rcx + ret +InternalMemScanMem64 ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem8.asm b/MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem8.asm new file mode 100644 index 0000000000..879273f960 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/x64/ScanMem8.asm @@ -0,0 +1,51 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ScanMem8.Asm +; +; Abstract: +; +; ScanMem8 function +; +; Notes: +; +; The following BaseMemoryLib instances share the same version of this file: +; +; BaseMemoryLibRepStr +; BaseMemoryLibMmx +; BaseMemoryLibSse2 +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; CONST VOID * +; EFIAPI +; InternalMemScanMem8 ( +; IN CONST VOID *Buffer, +; IN UINTN Length, +; IN UINT8 Value +; ); +;------------------------------------------------------------------------------ +InternalMemScanMem8 PROC USES rdi + mov rdi, rcx + mov rcx, rdx + mov rax, r8 + repne scasb + lea rax, [rdi - 1] + cmovnz rax, rcx ; set rax to 0 if not found + ret +InternalMemScanMem8 ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem.asm b/MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem.asm new file mode 100644 index 0000000000..5306520169 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem.asm @@ -0,0 +1,44 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; SetMem.Asm +; +; Abstract: +; +; SetMem function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; EFIAPI +; InternalMemSetMem ( +; IN VOID *Buffer, +; IN UINTN Count, +; IN UINT8 Value +; ) +;------------------------------------------------------------------------------ +InternalMemSetMem PROC USES rdi + mov rax, r8 + mov rdi, rcx + xchg rcx, rdx + rep stosb + mov rax, rdx + ret +InternalMemSetMem ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem16.asm b/MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem16.asm new file mode 100644 index 0000000000..fce9ed7ed5 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem16.asm @@ -0,0 +1,44 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; SetMem16.Asm +; +; Abstract: +; +; SetMem16 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; EFIAPI +; InternalMemSetMem16 ( +; IN VOID *Buffer, +; IN UINTN Count, +; IN UINT16 Value +; ) +;------------------------------------------------------------------------------ +InternalMemSetMem16 PROC USES rdi + mov rdi, rcx + mov rax, r8 + xchg rcx, rdx + rep stosw + mov rax, rdx + ret +InternalMemSetMem16 ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem32.asm b/MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem32.asm new file mode 100644 index 0000000000..ce9e54da85 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem32.asm @@ -0,0 +1,44 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; SetMem32.Asm +; +; Abstract: +; +; SetMem32 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; EFIAPI +; InternalMemSetMem32 ( +; IN VOID *Buffer, +; IN UINTN Count, +; IN UINT32 Value +; ); +;------------------------------------------------------------------------------ +InternalMemSetMem32 PROC USES rdi + mov rdi, rcx + mov rax, r8 + xchg rcx, rdx + rep stosd + mov rax, rdx + ret +InternalMemSetMem32 ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem64.asm b/MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem64.asm new file mode 100644 index 0000000000..97884a36fe --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/x64/SetMem64.asm @@ -0,0 +1,43 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; SetMem64.Asm +; +; Abstract: +; +; SetMem64 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; InternalMemSetMem64 ( +; IN VOID *Buffer, +; IN UINTN Count, +; IN UINT64 Value +; ) +;------------------------------------------------------------------------------ +InternalMemSetMem64 PROC USES rdi + mov rdi, rcx + mov rax, r8 + xchg rcx, rdx + rep stosq + mov rax, rdx + ret +InternalMemSetMem64 ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibRepStr/x64/ZeroMem.asm b/MdePkg/Library/BaseMemoryLibRepStr/x64/ZeroMem.asm new file mode 100644 index 0000000000..c01af8e6e4 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/x64/ZeroMem.asm @@ -0,0 +1,47 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ZeroMem.Asm +; +; Abstract: +; +; ZeroMem function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; InternalMemZeroMem ( +; IN VOID *Buffer, +; IN UINTN Count +; ); +;------------------------------------------------------------------------------ +InternalMemZeroMem PROC USES rdi + push rcx + xor rax, rax + mov rdi, rcx + mov rcx, rdx + shr rcx, 3 + and rdx, 7 + rep stosq + mov ecx, edx + rep stosb + pop rax + ret +InternalMemZeroMem ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.S index 3968604ca6..725367b2f9 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.S +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.S @@ -1,58 +1,53 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# CompareMem.Asm -# -# Abstract: -# -# CompareMem function -# -# Notes: -# -# The following BaseMemoryLib instances share the same version of this file: -# -# BaseMemoryLibRepStr -# BaseMemoryLibMmx -# BaseMemoryLibSse2 -# -#------------------------------------------------------------------------------ - -.globl _InternalMemCompareMem - -#------------------------------------------------------------------------------ -# INTN -# EFIAPI -# InternalMemCompareMem ( -# IN CONST VOID *DestinationBuffer, -# IN CONST VOID *SourceBuffer, -# IN UINTN Length -# ); -#------------------------------------------------------------------------------ -_InternalMemCompareMem: - push %esi - push %edi - movl 12(%esp), %esi - movl 16(%esp), %edi - movl 20(%esp), %ecx - repe cmpsb - movzbl -1(%esi), %eax - movzbl -1(%edi), %edx - subl %edx, %eax - pop %edi - pop %esi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# CompareMem.Asm +# +# Abstract: +# +# CompareMem function +# +# Notes: +# +# The following BaseMemoryLib instances share the same version of this file: +# +# BaseMemoryLibRepStr +# BaseMemoryLibMmx +# BaseMemoryLibSse2 +# +#------------------------------------------------------------------------------ + +.globl _InternalMemCompareMem + +#------------------------------------------------------------------------------ +# INTN +# EFIAPI +# InternalMemCompareMem ( +# IN CONST VOID *DestinationBuffer, +# IN CONST VOID *SourceBuffer, +# IN UINTN Length +# ); +#------------------------------------------------------------------------------ +_InternalMemCompareMem: + push %esi + push %edi + movl 12(%esp), %esi + movl 16(%esp), %edi + movl 20(%esp), %ecx + repe cmpsb + movzbl -1(%esi), %eax + movzbl -1(%edi), %edx + subl %edx, %eax + pop %edi + pop %esi + ret diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.asm b/MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.asm index 2509e40bd8..1d0e7fad39 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.asm +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.S index 82a2b94d0b..ddbcbaf1b1 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.S +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.S @@ -1,90 +1,85 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# CopyMem.asm -# -# Abstract: -# -# CopyMem function -# -# Notes: -# -#------------------------------------------------------------------------------ - -.globl _InternalMemCopyMem - -#------------------------------------------------------------------------------ -# VOID * -# EFIAPI -# InternalMemCopyMem ( -# IN VOID *Destination, -# IN VOID *Source, -# IN UINTN Count -# ); -#------------------------------------------------------------------------------ -_InternalMemCopyMem: - push %esi - push %edi - movl 16(%esp), %esi # esi <- Source - movl 12(%esp), %edi # edi <- Destination - movl 20(%esp), %edx # edx <- Count - leal -1(%esi,%edx,), %eax # eax <- End of Source - cmpl %edi, %esi - jae L0 - cmpl %edi, %eax # Overlapped? - jae L_CopyBackward # Copy backward if overlapped -L0: - xorl %ecx, %ecx - subl %edi, %ecx - andl $15, %ecx # ecx + edi aligns on 16-byte boundary - jz L1 - cmpl %edx, %ecx - cmova %edx, %ecx - subl %ecx, %edx # edx <- remaining bytes to copy - rep - movsb -L1: - movl %edx, %ecx - andl $15, %edx - shrl $4, %ecx # ecx <- # of DQwords to copy - jz L_CopyBytes - addl $-16, %esp - movdqu %xmm0, (%esp) -L2: - movdqu (%esi), %xmm0 - movntdq %xmm0, (%edi) - addl $16, %esi - addl $16, %edi - loop L2 - mfence - movdqu (%esp),%xmm0 - addl $16, %esp # stack cleanup - jmp L_CopyBytes -L_CopyBackward: - movl %eax, %esi # esi <- Last byte in Source - leal -1(%edi,%edx,), %edi # edi <- Last byte in Destination - std -L_CopyBytes: - movl %edx, %ecx - rep - movsb - cld - movl 12(%esp), %eax # eax <- Destination as return value - pop %edi - pop %esi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# CopyMem.asm +# +# Abstract: +# +# CopyMem function +# +# Notes: +# +#------------------------------------------------------------------------------ + +.globl _InternalMemCopyMem + +#------------------------------------------------------------------------------ +# VOID * +# EFIAPI +# InternalMemCopyMem ( +# IN VOID *Destination, +# IN VOID *Source, +# IN UINTN Count +# ); +#------------------------------------------------------------------------------ +_InternalMemCopyMem: + push %esi + push %edi + movl 16(%esp), %esi # esi <- Source + movl 12(%esp), %edi # edi <- Destination + movl 20(%esp), %edx # edx <- Count + leal -1(%esi,%edx,), %eax # eax <- End of Source + cmpl %edi, %esi + jae L0 + cmpl %edi, %eax # Overlapped? + jae L_CopyBackward # Copy backward if overlapped +L0: + xorl %ecx, %ecx + subl %edi, %ecx + andl $15, %ecx # ecx + edi aligns on 16-byte boundary + jz L1 + cmpl %edx, %ecx + cmova %edx, %ecx + subl %ecx, %edx # edx <- remaining bytes to copy + rep + movsb +L1: + movl %edx, %ecx + andl $15, %edx + shrl $4, %ecx # ecx <- # of DQwords to copy + jz L_CopyBytes + addl $-16, %esp + movdqu %xmm0, (%esp) +L2: + movdqu (%esi), %xmm0 + movntdq %xmm0, (%edi) + addl $16, %esi + addl $16, %edi + loop L2 + mfence + movdqu (%esp),%xmm0 + addl $16, %esp # stack cleanup + jmp L_CopyBytes +L_CopyBackward: + movl %eax, %esi # esi <- Last byte in Source + leal -1(%edi,%edx,), %edi # edi <- Last byte in Destination + std +L_CopyBytes: + movl %edx, %ecx + rep + movsb + cld + movl 12(%esp), %eax # eax <- Destination as return value + pop %edi + pop %esi + ret diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.asm b/MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.asm index 034918af2f..77fb786d98 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.asm +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.S index 276b4ff29f..5e65b9667a 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.S +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.S @@ -1,55 +1,50 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# ScanMem16.Asm -# -# Abstract: -# -# ScanMem16 function -# -# Notes: -# -# The following BaseMemoryLib instances share the same version of this file: -# -# BaseMemoryLibRepStr -# BaseMemoryLibMmx -# BaseMemoryLibSse2 -# -#------------------------------------------------------------------------------ - -.globl _InternalMemScanMem16 - -#------------------------------------------------------------------------------ -# CONST VOID * -# EFIAPI -# InternalMemScanMem16 ( -# IN CONST VOID *Buffer, -# IN UINTN Length, -# IN UINT16 Value -# ); -#------------------------------------------------------------------------------ -_InternalMemScanMem16: - push %edi - movl 12(%esp), %ecx - movl 8(%esp), %edi - movl 16(%esp), %eax - repne scasw - leal -2(%edi), %eax - cmovnz %ecx, %eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ScanMem16.Asm +# +# Abstract: +# +# ScanMem16 function +# +# Notes: +# +# The following BaseMemoryLib instances share the same version of this file: +# +# BaseMemoryLibRepStr +# BaseMemoryLibMmx +# BaseMemoryLibSse2 +# +#------------------------------------------------------------------------------ + +.globl _InternalMemScanMem16 + +#------------------------------------------------------------------------------ +# CONST VOID * +# EFIAPI +# InternalMemScanMem16 ( +# IN CONST VOID *Buffer, +# IN UINTN Length, +# IN UINT16 Value +# ); +#------------------------------------------------------------------------------ +_InternalMemScanMem16: + push %edi + movl 12(%esp), %ecx + movl 8(%esp), %edi + movl 16(%esp), %eax + repne scasw + leal -2(%edi), %eax + cmovnz %ecx, %eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.asm b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.asm index 6b5c81f556..57fab61b77 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.asm +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.S index fced1b2362..5d46ed2bc1 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.S +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.S @@ -1,55 +1,50 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# ScanMem32.Asm -# -# Abstract: -# -# ScanMem32 function -# -# Notes: -# -# The following BaseMemoryLib instances share the same version of this file: -# -# BaseMemoryLibRepStr -# BaseMemoryLibMmx -# BaseMemoryLibSse2 -# -#------------------------------------------------------------------------------ - -.globl _InternalMemScanMem32 - -#------------------------------------------------------------------------------ -# CONST VOID * -# EFIAPI -# InternalMemScanMem32 ( -# IN CONST VOID *Buffer, -# IN UINTN Length, -# IN UINT32 Value -# ); -#------------------------------------------------------------------------------ -_InternalMemScanMem32: - push %edi - movl 12(%esp), %ecx - movl 8(%esp), %edi - movl 16(%esp), %eax - repne scasl - leal -4(%edi), %eax - cmovnz %ecx, %eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ScanMem32.Asm +# +# Abstract: +# +# ScanMem32 function +# +# Notes: +# +# The following BaseMemoryLib instances share the same version of this file: +# +# BaseMemoryLibRepStr +# BaseMemoryLibMmx +# BaseMemoryLibSse2 +# +#------------------------------------------------------------------------------ + +.globl _InternalMemScanMem32 + +#------------------------------------------------------------------------------ +# CONST VOID * +# EFIAPI +# InternalMemScanMem32 ( +# IN CONST VOID *Buffer, +# IN UINTN Length, +# IN UINT32 Value +# ); +#------------------------------------------------------------------------------ +_InternalMemScanMem32: + push %edi + movl 12(%esp), %ecx + movl 8(%esp), %edi + movl 16(%esp), %eax + repne scasl + leal -4(%edi), %eax + cmovnz %ecx, %eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.asm b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.asm index cb0feed6be..6ac857ce16 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.asm +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.S index 37dc3bbf67..3ba69650ab 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.S +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.S @@ -1,64 +1,59 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# ScanMem64.Asm -# -# Abstract: -# -# ScanMem64 function -# -# Notes: -# -# The following BaseMemoryLib instances share the same version of this file: -# -# BaseMemoryLibRepStr -# BaseMemoryLibMmx -# BaseMemoryLibSse2 -# -#------------------------------------------------------------------------------ - -.globl _InternalMemScanMem64 - -#------------------------------------------------------------------------------ -# CONST VOID * -# EFIAPI -# InternalMemScanMem64 ( -# IN CONST VOID *Buffer, -# IN UINTN Length, -# IN UINT64 Value -# ); -#------------------------------------------------------------------------------ -_InternalMemScanMem64: - push %edi - movl 12(%esp), %ecx - movl 16(%esp), %eax - movl 20(%esp), %edx - movl 8(%esp), %edi -L0: - cmpl (%edi), %eax - leal 8(%edi), %edi - loopne L0 - jne L1 - cmpl -4(%edi), %edx - jecxz L1 - jne L0 -L1: - leal -8(%edi), %eax - cmovne %ecx, %eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ScanMem64.Asm +# +# Abstract: +# +# ScanMem64 function +# +# Notes: +# +# The following BaseMemoryLib instances share the same version of this file: +# +# BaseMemoryLibRepStr +# BaseMemoryLibMmx +# BaseMemoryLibSse2 +# +#------------------------------------------------------------------------------ + +.globl _InternalMemScanMem64 + +#------------------------------------------------------------------------------ +# CONST VOID * +# EFIAPI +# InternalMemScanMem64 ( +# IN CONST VOID *Buffer, +# IN UINTN Length, +# IN UINT64 Value +# ); +#------------------------------------------------------------------------------ +_InternalMemScanMem64: + push %edi + movl 12(%esp), %ecx + movl 16(%esp), %eax + movl 20(%esp), %edx + movl 8(%esp), %edi +L0: + cmpl (%edi), %eax + leal 8(%edi), %edi + loopne L0 + jne L1 + cmpl -4(%edi), %edx + jecxz L1 + jne L0 +L1: + leal -8(%edi), %eax + cmovne %ecx, %eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.asm b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.asm index ee0deddc61..ca54f13738 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.asm +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.S index e7d2a26cad..7a834a5635 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.S +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.S @@ -1,55 +1,50 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# ScanMem8.Asm -# -# Abstract: -# -# ScanMem8 function -# -# Notes: -# -# The following BaseMemoryLib instances share the same version of this file: -# -# BaseMemoryLibRepStr -# BaseMemoryLibMmx -# BaseMemoryLibSse2 -# -#------------------------------------------------------------------------------ - -.globl _InternalMemScanMem8 - -#------------------------------------------------------------------------------ -# CONST VOID * -# EFIAPI -# InternalMemScanMem8 ( -# IN CONST VOID *Buffer, -# IN UINTN Length, -# IN UINT8 Value -# ); -#------------------------------------------------------------------------------ -_InternalMemScanMem8: - push %edi - movl 12(%esp), %ecx - movl 8(%esp), %edi - movb 16(%esp), %al - repne scasb - leal -1(%edi), %eax - cmovnz %ecx, %eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ScanMem8.Asm +# +# Abstract: +# +# ScanMem8 function +# +# Notes: +# +# The following BaseMemoryLib instances share the same version of this file: +# +# BaseMemoryLibRepStr +# BaseMemoryLibMmx +# BaseMemoryLibSse2 +# +#------------------------------------------------------------------------------ + +.globl _InternalMemScanMem8 + +#------------------------------------------------------------------------------ +# CONST VOID * +# EFIAPI +# InternalMemScanMem8 ( +# IN CONST VOID *Buffer, +# IN UINTN Length, +# IN UINT8 Value +# ); +#------------------------------------------------------------------------------ +_InternalMemScanMem8: + push %edi + movl 12(%esp), %ecx + movl 8(%esp), %edi + movb 16(%esp), %al + repne scasb + leal -1(%edi), %eax + cmovnz %ecx, %eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.asm b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.asm index 97d201abb5..a3f65b64fa 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.asm +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.S index aa6f59fb4f..86bba889f2 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.S +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.S @@ -1,81 +1,76 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# SetMem.asm -# -# Abstract: -# -# SetMem function -# -# Notes: -# -#------------------------------------------------------------------------------ - - .686: - #.MODEL flat,C - .xmm: - .code: - -#------------------------------------------------------------------------------ -# VOID * -# _mem_SetMem ( -# IN VOID *Buffer, -# IN UINTN Count, -# IN UINT8 Value -# ); -#------------------------------------------------------------------------------ -.globl _InternalMemSetMem -_InternalMemSetMem: - push %edi - movl 12(%esp), %edx # edx <- Count - movl 8(%esp), %edi # edi <- Buffer - movb 16(%esp), %al # al <- Value - xorl %ecx, %ecx - subl %edi, %ecx - andl $15, %ecx # ecx + edi aligns on 16-byte boundary - jz L0 - cmpl %edx, %ecx - cmova %edx, %ecx - subl %ecx, %edx - rep - stosb -L0: - movl %edx, %ecx - andl $15, %edx - shrl $4, %ecx # ecx <- # of DQwords to set - jz L_SetBytes - movb %al, %ah # ax <- Value | (Value << 8) - addl $-16, %esp - movdqu %xmm0, (%esp) - movd %eax, %xmm0 - pshuflw $0, %xmm0, %xmm0 - movlhps %xmm0, %xmm0 -L1: - movntdq %xmm0, (%edi) - addl $16, %edi - loop L1 - mfence - movdqu (%esp), %xmm0 - addl $16, %esp # stack cleanup -L_SetBytes: - movl %edx, %ecx - rep - stosb - movl 8(%esp), %eax # eax <- Buffer as return value - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# SetMem.asm +# +# Abstract: +# +# SetMem function +# +# Notes: +# +#------------------------------------------------------------------------------ + + .686: + #.MODEL flat,C + .xmm: + .code: + +#------------------------------------------------------------------------------ +# VOID * +# _mem_SetMem ( +# IN VOID *Buffer, +# IN UINTN Count, +# IN UINT8 Value +# ); +#------------------------------------------------------------------------------ +.globl _InternalMemSetMem +_InternalMemSetMem: + push %edi + movl 12(%esp), %edx # edx <- Count + movl 8(%esp), %edi # edi <- Buffer + movb 16(%esp), %al # al <- Value + xorl %ecx, %ecx + subl %edi, %ecx + andl $15, %ecx # ecx + edi aligns on 16-byte boundary + jz L0 + cmpl %edx, %ecx + cmova %edx, %ecx + subl %ecx, %edx + rep + stosb +L0: + movl %edx, %ecx + andl $15, %edx + shrl $4, %ecx # ecx <- # of DQwords to set + jz L_SetBytes + movb %al, %ah # ax <- Value | (Value << 8) + addl $-16, %esp + movdqu %xmm0, (%esp) + movd %eax, %xmm0 + pshuflw $0, %xmm0, %xmm0 + movlhps %xmm0, %xmm0 +L1: + movntdq %xmm0, (%edi) + addl $16, %edi + loop L1 + mfence + movdqu (%esp), %xmm0 + addl $16, %esp # stack cleanup +L_SetBytes: + movl %edx, %ecx + rep + stosb + movl 8(%esp), %eax # eax <- Buffer as return value + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.asm b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.asm index ab89482d6f..a4de29c521 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.asm +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.S index fac9a722b0..8ec96a9b6c 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.S +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.S @@ -1,74 +1,69 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# SetMem16.asm -# -# Abstract: -# -# SetMem16 function -# -# Notes: -# -#------------------------------------------------------------------------------ - -.globl _InternalMemSetMem16 - -#------------------------------------------------------------------------------ -# VOID * -# EFIAPI -# InternalMemSetMem16 ( -# IN VOID *Buffer, -# IN UINTN Count, -# IN UINT16 Value -# ) -#------------------------------------------------------------------------------ -_InternalMemSetMem16: - push %edi - movl 12(%esp), %edx - movl 8(%esp), %edi - xorl %ecx, %ecx - subl %edi, %ecx - andl $15, %ecx # ecx + edi aligns on 16-byte boundary - movl 16(%esp), %eax - jz L0 - shrl %ecx - cmpl %edx, %ecx - cmova %edx, %ecx - subl %ecx, %edx - rep - stosw -L0: - movl %edx, %ecx - andl $7, %edx - shrl $3, %ecx - jz L_SetWords - movd %eax, %xmm0 - pshuflw $0, %xmm0, %xmm0 - movlhps %xmm0, %xmm0 -L1: - movntdq %xmm0, (%edi) - addl $16, %edi - loop L1 - mfence -L_SetWords: - movl %edx, %ecx - rep - stosw - movl 8(%esp), %eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# SetMem16.asm +# +# Abstract: +# +# SetMem16 function +# +# Notes: +# +#------------------------------------------------------------------------------ + +.globl _InternalMemSetMem16 + +#------------------------------------------------------------------------------ +# VOID * +# EFIAPI +# InternalMemSetMem16 ( +# IN VOID *Buffer, +# IN UINTN Count, +# IN UINT16 Value +# ) +#------------------------------------------------------------------------------ +_InternalMemSetMem16: + push %edi + movl 12(%esp), %edx + movl 8(%esp), %edi + xorl %ecx, %ecx + subl %edi, %ecx + andl $15, %ecx # ecx + edi aligns on 16-byte boundary + movl 16(%esp), %eax + jz L0 + shrl %ecx + cmpl %edx, %ecx + cmova %edx, %ecx + subl %ecx, %edx + rep + stosw +L0: + movl %edx, %ecx + andl $7, %edx + shrl $3, %ecx + jz L_SetWords + movd %eax, %xmm0 + pshuflw $0, %xmm0, %xmm0 + movlhps %xmm0, %xmm0 +L1: + movntdq %xmm0, (%edi) + addl $16, %edi + loop L1 + mfence +L_SetWords: + movl %edx, %ecx + rep + stosw + movl 8(%esp), %eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.asm b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.asm index 75abe18b1d..a709899fe2 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.asm +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.S index 8b0095a1e2..f91169a6e0 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.S +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.S @@ -1,73 +1,68 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# SetMem32.asm -# -# Abstract: -# -# SetMem32 function -# -# Notes: -# -#------------------------------------------------------------------------------ - -.globl _InternalMemSetMem32 - -#------------------------------------------------------------------------------ -# VOID * -# EFIAPI -# InternalMemSetMem32 ( -# IN VOID *Buffer, -# IN UINTN Count, -# IN UINT32 Value -# ); -#------------------------------------------------------------------------------ -_InternalMemSetMem32: - push %edi - movl 12(%esp), %edx - movl 8(%esp), %edi - xorl %ecx, %ecx - subl %edi, %ecx - andl $15, %ecx # ecx + edi aligns on 16-byte boundary - movl 16(%esp), %eax - jz L0 - shrl $2, %ecx - cmpl %edx, %ecx - cmova %edx, %ecx - subl %ecx, %edx - rep - stosl -L0: - movl %edx, %ecx - andl $3, %edx - shrl $2, %ecx - jz L_SetDwords - movd %eax, %xmm0 - pshufd $0, %xmm0, %xmm0 -L1: - movntdq %xmm0, (%edi) - addl $16, %edi - loop L1 - mfence -L_SetDwords: - movl %edx, %ecx - rep - stosl - movl 8(%esp), %eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# SetMem32.asm +# +# Abstract: +# +# SetMem32 function +# +# Notes: +# +#------------------------------------------------------------------------------ + +.globl _InternalMemSetMem32 + +#------------------------------------------------------------------------------ +# VOID * +# EFIAPI +# InternalMemSetMem32 ( +# IN VOID *Buffer, +# IN UINTN Count, +# IN UINT32 Value +# ); +#------------------------------------------------------------------------------ +_InternalMemSetMem32: + push %edi + movl 12(%esp), %edx + movl 8(%esp), %edi + xorl %ecx, %ecx + subl %edi, %ecx + andl $15, %ecx # ecx + edi aligns on 16-byte boundary + movl 16(%esp), %eax + jz L0 + shrl $2, %ecx + cmpl %edx, %ecx + cmova %edx, %ecx + subl %ecx, %edx + rep + stosl +L0: + movl %edx, %ecx + andl $3, %edx + shrl $2, %ecx + jz L_SetDwords + movd %eax, %xmm0 + pshufd $0, %xmm0, %xmm0 +L1: + movntdq %xmm0, (%edi) + addl $16, %edi + loop L1 + mfence +L_SetDwords: + movl %edx, %ecx + rep + stosl + movl 8(%esp), %eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.asm b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.asm index c12af90e79..99954a5e4b 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.asm +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.S index bf42354572..ef9918f0f9 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.S +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.S @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - #------------------------------------------------------------------------------ # # Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.asm b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.asm index 17f0eb4bea..69406707a6 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.asm +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.S index 657584d4df..8b4157f741 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.S +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.S @@ -1,70 +1,65 @@ -// -// Include common header file for this module. -// -#include "CommonHeader.h" - -#------------------------------------------------------------------------------ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# ZeroMem.asm -# -# Abstract: -# -# ZeroMem function -# -# Notes: -# -#------------------------------------------------------------------------------ - -.globl _InternalMemZeroMem - -#------------------------------------------------------------------------------ -# VOID * -# EFIAPI -# InternalMemZeroMem ( -# IN VOID *Buffer, -# IN UINTN Count -# ); -#------------------------------------------------------------------------------ -_InternalMemZeroMem: - push %edi - movl 8(%esp), %edi - movl 12(%esp), %edx - xorl %ecx, %ecx - subl %edi, %ecx - xorl %eax, %eax - andl $15, %ecx - jz L0 - cmpl %edx, %ecx - cmova %edx, %ecx - subl %ecx, %edx - rep - stosb -L0: - movl %edx, %ecx - andl $15, %edx - shrl $4, %ecx - jz L_ZeroBytes - pxor %xmm0, %xmm0 -L1: - movntdq %xmm0, (%edi) - addl $16, %edi - loop L1 - mfence -L_ZeroBytes: - movl %edx, %ecx - rep - stosb - movl 8(%esp), %eax - pop %edi - ret +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Module Name: +# +# ZeroMem.asm +# +# Abstract: +# +# ZeroMem function +# +# Notes: +# +#------------------------------------------------------------------------------ + +.globl _InternalMemZeroMem + +#------------------------------------------------------------------------------ +# VOID * +# EFIAPI +# InternalMemZeroMem ( +# IN VOID *Buffer, +# IN UINTN Count +# ); +#------------------------------------------------------------------------------ +_InternalMemZeroMem: + push %edi + movl 8(%esp), %edi + movl 12(%esp), %edx + xorl %ecx, %ecx + subl %edi, %ecx + xorl %eax, %eax + andl $15, %ecx + jz L0 + cmpl %edx, %ecx + cmova %edx, %ecx + subl %ecx, %edx + rep + stosb +L0: + movl %edx, %ecx + andl $15, %edx + shrl $4, %ecx + jz L_ZeroBytes + pxor %xmm0, %xmm0 +L1: + movntdq %xmm0, (%edi) + addl $16, %edi + loop L1 + mfence +L_ZeroBytes: + movl %edx, %ecx + rep + stosb + movl 8(%esp), %eax + pop %edi + ret diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.asm b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.asm index 294e8ce041..3792c88879 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.asm +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.asm @@ -1,8 +1,3 @@ -// -// Include common header file for this module. -// - - ;------------------------------------------------------------------------------ ; ; Copyright (c) 2006, Intel Corporation diff --git a/MdePkg/Library/BaseMemoryLibSse2/x64/CompareMem.asm b/MdePkg/Library/BaseMemoryLibSse2/x64/CompareMem.asm new file mode 100644 index 0000000000..554bc07c64 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/x64/CompareMem.asm @@ -0,0 +1,52 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; CompareMem.Asm +; +; Abstract: +; +; CompareMem function +; +; Notes: +; +; The following BaseMemoryLib instances share the same version of this file: +; +; BaseMemoryLibRepStr +; BaseMemoryLibMmx +; BaseMemoryLibSse2 +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; INTN +; EFIAPI +; InternalMemCompareMem ( +; IN CONST VOID *DestinationBuffer, +; IN CONST VOID *SourceBuffer, +; IN UINTN Length +; ); +;------------------------------------------------------------------------------ +InternalMemCompareMem PROC USES rsi rdi + mov rsi, rcx + mov rdi, rdx + mov rcx, r8 + repe cmpsb + movzx rax, byte ptr [rsi - 1] + movzx rdx, byte ptr [rdi - 1] + sub rax, rdx + ret +InternalMemCompareMem ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibSse2/x64/CopyMem.asm b/MdePkg/Library/BaseMemoryLibSse2/x64/CopyMem.asm new file mode 100644 index 0000000000..03ffe0c00f --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/x64/CopyMem.asm @@ -0,0 +1,79 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; CopyMem.asm +; +; Abstract: +; +; CopyMem function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; EFIAPI +; InternalMemCopyMem ( +; IN VOID *Destination, +; IN VOID *Source, +; IN UINTN Count +; ); +;------------------------------------------------------------------------------ +InternalMemCopyMem PROC USES rsi rdi + mov rsi, rdx ; rsi <- Source + mov rdi, rcx ; rdi <- Destination + lea r9, [rsi + r8 - 1] ; r9 <- Last byte of Source + cmp rsi, rdi + mov rax, rdi ; rax <- Destination as return value + jae @F ; Copy forward if Source > Destination + cmp r9, rdi ; Overlapped? + jae @CopyBackward ; Copy backward if overlapped +@@: + xor rcx, rcx + sub rcx, rdi ; rcx <- -rdi + and rcx, 15 ; rcx + rsi should be 16 bytes aligned + jz @F ; skip if rcx == 0 + cmp rcx, r8 + cmova rcx, r8 + sub r8, rcx + rep movsb +@@: + mov rcx, r8 + and r8, 15 + shr rcx, 4 ; rcx <- # of DQwords to copy + jz @CopyBytes + movdqa [rsp + 18h], xmm0 ; save xmm0 on stack +@@: + movdqu xmm0, [rsi] ; rsi may not be 16-byte aligned + movntdq [rdi], xmm0 ; rdi should be 16-byte aligned + add rsi, 16 + add rdi, 16 + loop @B + mfence + movdqa xmm0, [rsp + 18h] ; restore xmm0 + jmp @CopyBytes ; copy remaining bytes +@CopyBackward: + mov rsi, r9 ; rsi <- Last byte of Source + lea rdi, [rdi + r8 - 1] ; rdi <- Last byte of Destination + std +@CopyBytes: + mov rcx, r8 + rep movsb + cld + ret +InternalMemCopyMem ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem16.asm b/MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem16.asm new file mode 100644 index 0000000000..a2538c2cca --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem16.asm @@ -0,0 +1,51 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ScanMem16.Asm +; +; Abstract: +; +; ScanMem16 function +; +; Notes: +; +; The following BaseMemoryLib instances share the same version of this file: +; +; BaseMemoryLibRepStr +; BaseMemoryLibMmx +; BaseMemoryLibSse2 +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; CONST VOID * +; EFIAPI +; InternalMemScanMem16 ( +; IN CONST VOID *Buffer, +; IN UINTN Length, +; IN UINT16 Value +; ); +;------------------------------------------------------------------------------ +InternalMemScanMem16 PROC USES rdi + mov rdi, rcx + mov rax, r8 + mov rcx, rdx + repne scasw + lea rax, [rdi - 2] + cmovnz rax, rcx + ret +InternalMemScanMem16 ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem32.asm b/MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem32.asm new file mode 100644 index 0000000000..e0523d8547 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem32.asm @@ -0,0 +1,51 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ScanMem32.Asm +; +; Abstract: +; +; ScanMem32 function +; +; Notes: +; +; The following BaseMemoryLib instances share the same version of this file: +; +; BaseMemoryLibRepStr +; BaseMemoryLibMmx +; BaseMemoryLibSse2 +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; CONST VOID * +; EFIAPI +; InternalMemScanMem32 ( +; IN CONST VOID *Buffer, +; IN UINTN Length, +; IN UINT32 Value +; ); +;------------------------------------------------------------------------------ +InternalMemScanMem32 PROC USES rdi + mov rdi, rcx + mov rax, r8 + mov rcx, rdx + repne scasd + lea rax, [rdi - 4] + cmovnz rax, rcx + ret +InternalMemScanMem32 ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem64.asm b/MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem64.asm new file mode 100644 index 0000000000..0e7e9c782f --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem64.asm @@ -0,0 +1,51 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ScanMem64.Asm +; +; Abstract: +; +; ScanMem64 function +; +; Notes: +; +; The following BaseMemoryLib instances share the same version of this file: +; +; BaseMemoryLibRepStr +; BaseMemoryLibMmx +; BaseMemoryLibSse2 +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; CONST VOID * +; EFIAPI +; InternalMemScanMem64 ( +; IN CONST VOID *Buffer, +; IN UINTN Length, +; IN UINT64 Value +; ); +;------------------------------------------------------------------------------ +InternalMemScanMem64 PROC USES rdi + mov rdi, rcx + mov rax, r8 + mov rcx, rdx + repne scasq + lea rax, [rdi - 8] + cmovnz rax, rcx + ret +InternalMemScanMem64 ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem8.asm b/MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem8.asm new file mode 100644 index 0000000000..879273f960 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/x64/ScanMem8.asm @@ -0,0 +1,51 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ScanMem8.Asm +; +; Abstract: +; +; ScanMem8 function +; +; Notes: +; +; The following BaseMemoryLib instances share the same version of this file: +; +; BaseMemoryLibRepStr +; BaseMemoryLibMmx +; BaseMemoryLibSse2 +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; CONST VOID * +; EFIAPI +; InternalMemScanMem8 ( +; IN CONST VOID *Buffer, +; IN UINTN Length, +; IN UINT8 Value +; ); +;------------------------------------------------------------------------------ +InternalMemScanMem8 PROC USES rdi + mov rdi, rcx + mov rcx, rdx + mov rax, r8 + repne scasb + lea rax, [rdi - 1] + cmovnz rax, rcx ; set rax to 0 if not found + ret +InternalMemScanMem8 ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem.asm b/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem.asm new file mode 100644 index 0000000000..25cfcf0d12 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem.asm @@ -0,0 +1,69 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; SetMem.asm +; +; Abstract: +; +; SetMem function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; InternalMemSetMem ( +; IN VOID *Buffer, +; IN UINTN Count, +; IN UINT8 Value +; ) +;------------------------------------------------------------------------------ +InternalMemSetMem PROC USES rdi + mov rdi, rcx ; rdi <- Buffer + mov al, r8b ; al <- Value + mov r9, rdi ; r9 <- Buffer as return value + xor rcx, rcx + sub rcx, rdi + and rcx, 15 ; rcx + rdi aligns on 16-byte boundary + jz @F + cmp rcx, rdx + cmova rcx, rdx + sub rdx, rcx + rep stosb +@@: + mov rcx, rdx + and rdx, 15 + shr rcx, 4 + jz @SetBytes + mov ah, al ; ax <- Value repeats twice + movdqa [rsp + 10h], xmm0 ; save xmm0 + movd xmm0, eax ; xmm0[0..16] <- Value repeats twice + pshuflw xmm0, xmm0, 0 ; xmm0[0..63] <- Value repeats 8 times + movlhps xmm0, xmm0 ; xmm0 <- Value repeats 16 times +@@: + movntdq [rdi], xmm0 ; rdi should be 16-byte aligned + add rdi, 16 + loop @B + mfence + movdqa xmm0, [rsp + 10h] ; restore xmm0 +@SetBytes: + mov ecx, edx ; high 32 bits of rcx are always zero + rep stosb + mov rax, r9 ; rax <- Return value + ret +InternalMemSetMem ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem16.asm b/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem16.asm new file mode 100644 index 0000000000..77b8cf43aa --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem16.asm @@ -0,0 +1,67 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; SetMem16.asm +; +; Abstract: +; +; SetMem16 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; InternalMemSetMem16 ( +; IN VOID *Buffer, +; IN UINTN Count, +; IN UINT16 Value +; ) +;------------------------------------------------------------------------------ +InternalMemSetMem16 PROC USES rdi + mov rdi, rcx + mov r9, rdi + xor rcx, rcx + sub rcx, rdi + and rcx, 15 + mov rax, r8 + jz @F + shr rcx, 1 + cmp rcx, rdx + cmova rcx, rdx + sub rdx, rcx + rep stosw +@@: + mov rcx, rdx + and edx, 7 + shr rcx, 3 + jz @SetWords + movd xmm0, eax + pshuflw xmm0, xmm0, 0 + movlhps xmm0, xmm0 +@@: + movntdq [rdi], xmm0 + add rdi, 16 + loop @B + mfence +@SetWords: + mov ecx, edx + rep stosw + mov rax, r9 + ret +InternalMemSetMem16 ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem32.asm b/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem32.asm new file mode 100644 index 0000000000..eba29bb88d --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem32.asm @@ -0,0 +1,66 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; SetMem32.asm +; +; Abstract: +; +; SetMem32 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; InternalMemSetMem32 ( +; IN VOID *Buffer, +; IN UINTN Count, +; IN UINT8 Value +; ) +;------------------------------------------------------------------------------ +InternalMemSetMem32 PROC USES rdi + mov rdi, rcx + mov r9, rdi + xor rcx, rcx + sub rcx, rdi + and rcx, 15 + mov rax, r8 + jz @F + shr rcx, 2 + cmp rcx, rdx + cmova rcx, rdx + sub rdx, rcx + rep stosd +@@: + mov rcx, rdx + and edx, 3 + shr rcx, 2 + jz @SetDwords + movd xmm0, eax + pshufd xmm0, xmm0, 0 +@@: + movntdq [rdi], xmm0 + add rdi, 16 + loop @B + mfence +@SetDwords: + mov ecx, edx + rep stosd + mov rax, r9 + ret +InternalMemSetMem32 ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem64.asm b/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem64.asm new file mode 100644 index 0000000000..a26b9412d4 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/x64/SetMem64.asm @@ -0,0 +1,59 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; SetMem64.asm +; +; Abstract: +; +; SetMem64 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; InternalMemSetMem64 ( +; IN VOID *Buffer, +; IN UINTN Count, +; IN UINT64 Value +; ) +;------------------------------------------------------------------------------ +InternalMemSetMem64 PROC + mov rax, rcx ; rax <- Buffer + xchg rcx, rdx ; rcx <- Count & rdx <- Buffer + test dl, 8 + movd xmm0, r8 + jz @F + mov [rdx], r8 + add rdx, 8 + dec rcx +@@: + shr rcx, 1 + jz @SetQwords + movlhps xmm0, xmm0 +@@: + movntdq [rdx], xmm0 + lea rdx, [rdx + 16] + loop @B + mfence +@SetQwords: + jnc @F + mov [rdx], r8 +@@: + ret +InternalMemSetMem64 ENDP + + END diff --git a/MdePkg/Library/BaseMemoryLibSse2/x64/ZeroMem.asm b/MdePkg/Library/BaseMemoryLibSse2/x64/ZeroMem.asm new file mode 100644 index 0000000000..7eebd3a8ef --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/x64/ZeroMem.asm @@ -0,0 +1,63 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; ZeroMem.asm +; +; Abstract: +; +; ZeroMem function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; InternalMemZeroMem ( +; IN VOID *Buffer, +; IN UINTN Count +; ) +;------------------------------------------------------------------------------ +InternalMemZeroMem PROC USES rdi + mov rdi, rcx + xor rcx, rcx + xor eax, eax + sub rcx, rdi + and rcx, 15 + mov r8, rdi + jz @F + cmp rcx, rdx + cmova rcx, rdx + sub rdx, rcx + rep stosb +@@: + mov rcx, rdx + and edx, 15 + shr rcx, 4 + jz @ZeroBytes + pxor xmm0, xmm0 +@@: + movntdq [rdi], xmm0 ; rdi should be 16-byte aligned + add rdi, 16 + loop @B + mfence +@ZeroBytes: + mov ecx, edx + rep stosb + mov rax, r8 + ret +InternalMemZeroMem ENDP + + END diff --git a/MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf b/MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf index e90d5da488..bcebb4dac0 100644 --- a/MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf +++ b/MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf @@ -1,7 +1,7 @@ #/** @file # Runtime driver library # -# Instance of runtime driver library, Hook VitualAddressChange and +# Instance of runtime driver library, Hook VitualAddressChange and # BooterviceExit event and provide runtime service. # Copyright (c) 2006 - 2007, Intel Corporation. # @@ -22,11 +22,11 @@ ################################################################################ [Defines] INF_VERSION = 0x00010005 - BASE_NAME = EdkUefiRuntimeLib + BASE_NAME = UefiRuntimeLib FILE_GUID = b1ee6c28-54aa-4d17-b705-3e28ccb27b2e MODULE_TYPE = DXE_RUNTIME_DRIVER VERSION_STRING = 1.0 - LIBRARY_CLASS = UefiRuntimeLib|DXE_RUNTIME_DRIVER DXE_SAL_DRIVER + LIBRARY_CLASS = UefiRuntimeLib|DXE_RUNTIME_DRIVER DXE_SAL_DRIVER EDK_RELEASE_VERSION = 0x00020000 EFI_SPECIFICATION_VERSION = 0x00020000 @@ -36,7 +36,7 @@ # # The following information is for reference only and not required by the build tools. # -# VALID_ARCHITECTURES = IA32 X64 EBC + VALID_ARCHITECTURES = IA32 X64 EBC # ################################################################################ diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc index d109164c24..6067d4086e 100644 --- a/MdePkg/MdePkg.dsc +++ b/MdePkg/MdePkg.dsc @@ -100,7 +100,7 @@ ${WORKSPACE}/MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf # ${WORKSPACE}/MdePkg/Library/DxeSmbusLib/DxeSmbusLib.inf ${WORKSPACE}/MdePkg/Library/PeiCoreEntryPoint/PeiCoreEntryPoint.inf -# ${WORKSPACE}/MdePkg/Library/PeiHobLib/PeiHobLib.inf + ${WORKSPACE}/MdePkg/Library/PeiHobLib/PeiHobLib.inf ${WORKSPACE}/MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf ${WORKSPACE}/MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf ${WORKSPACE}/MdePkg/Library/PeiPcdLib/PeiPcdLib.inf @@ -108,7 +108,6 @@ ${WORKSPACE}/MdePkg/Library/PeiServicesLib/PeiServicesLib.inf ${WORKSPACE}/MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf # ${WORKSPACE}/MdePkg/Library/PeiSmbusLib/PeiSmbusLib.inf - ${WORKSPACE}/MdePkg/Library/SecPeiDxeTimerLibCpu/SecPeiDxeTimerLibCpu.inf ${WORKSPACE}/MdePkg/Library/SerialPortLibNull/SerialPortLibNull.inf ${WORKSPACE}/MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf ${WORKSPACE}/MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf @@ -118,7 +117,6 @@ ${WORKSPACE}/MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLibDevicePathProtocol.inf ${WORKSPACE}/MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf ${WORKSPACE}/MdePkg/Library/UefiLib/UefiLib.inf - ${WORKSPACE}/MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf ${WORKSPACE}/MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf ${WORKSPACE}\MdePkg\Library/UefiScsiLib/UefiScsiLib.inf @@ -126,9 +124,14 @@ [Components.IA32] ${WORKSPACE}\MdePkg\Library/BaseMemoryLibSse2/BaseMemoryLibSse2.inf ${WORKSPACE}\MdePkg\Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr.inf + ${WORKSPACE}/MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf + ${WORKSPACE}/MdePkg/Library/SecPeiDxeTimerLibCpu/SecPeiDxeTimerLibCpu.inf [Components.X64] ${WORKSPACE}\MdePkg\Library/BaseMemoryLibSse2/BaseMemoryLibSse2.inf ${WORKSPACE}\MdePkg\Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr.inf + ${WORKSPACE}/MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf + ${WORKSPACE}/MdePkg/Library/SecPeiDxeTimerLibCpu/SecPeiDxeTimerLibCpu.inf - +[Components.IPF] + ${WORKSPACE}/MdePkg/Library/SecPeiDxeTimerLibCpu/SecPeiDxeTimerLibCpu.inf -- 2.39.2