]> git.proxmox.com Git - mirror_edk2.git/commitdiff
modify CopyMem.S to align with CopyMem.asm
authoreric_tian <eric_tian@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 23 Oct 2008 05:17:35 +0000 (05:17 +0000)
committereric_tian <eric_tian@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 23 Oct 2008 05:17:35 +0000 (05:17 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6191 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Library/BaseMemoryLibMmx/X64/CopyMem.S

index 3e7a396b5b4feec8e31f857b03d526c0cd1b7b3a..426a602286a17245e69d9f7d2eb2205ee92558ee 100644 (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
-