From: eric_tian Date: Thu, 23 Oct 2008 05:17:35 +0000 (+0000) Subject: modify CopyMem.S to align with CopyMem.asm X-Git-Tag: edk2-stable201903~20035 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=a8f1dcd7b7fcbe1dc51f79bd4b346121e073ea72 modify CopyMem.S to align with CopyMem.asm git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6191 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/MdePkg/Library/BaseMemoryLibMmx/X64/CopyMem.S b/MdePkg/Library/BaseMemoryLibMmx/X64/CopyMem.S index 3e7a396b5b..426a602286 100644 --- a/MdePkg/Library/BaseMemoryLibMmx/X64/CopyMem.S +++ b/MdePkg/Library/BaseMemoryLibMmx/X64/CopyMem.S @@ -44,24 +44,32 @@ ASM_PFX(InternalMemCopyMem): lea r9, [rsi + r8 - 1] # r9 <- End of Source cmp rsi, rdi mov rax, rdi # rax <- Destination as return value - jae _InternalMemCopyMem_al_0000 + jae L0 cmp r9, rdi - jae _atSym_CopyBackward # Copy backward if overlapped -_InternalMemCopyMem_al_0000: + jae L_CopyBackward # Copy backward if overlapped +L0: mov rcx, r8 and r8, 7 - shr rcx, 3 - rep movsq # Copy as many Qwords as possible - jmp _atSym_CopyBytes -_atSym_CopyBackward: + shr rcx, 3 # rcx <- # of Qwords to copy + jz L_CopyBytes + movd r10, mm0 # (Save mm0 in r10) +L1: + movq mm0, [rsi] + movntq [rdi], mm0 + add rsi, 8 + add rdi, 8 + loop L1 + mfence + movd mm0, r10 # (Restore mm0) + jmp L_CopyBytes +L_CopyBackward: mov rsi, r9 # rsi <- End of Source - lea rdi, [rdi + r8 - 1] # esi <- End of Destination + lea rdi, [rdi + r8 - 1] # rdi <- End of Destination std # set direction flag -_atSym_CopyBytes: +L_CopyBytes: mov rcx, r8 rep movsb # Copy bytes backward cld pop rdi pop rsi ret -