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
This commit is contained in:
eric_tian 2008-10-23 05:17:35 +00:00
parent a7b6458434
commit a8f1dcd7b7
1 changed files with 18 additions and 10 deletions

View File

@ -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