]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseMemoryLibMmx/X64/CopyMem.asm
1. Updated function headers for all assembly function
[mirror_edk2.git] / MdePkg / Library / BaseMemoryLibMmx / X64 / CopyMem.asm
index 801cf92750aee136041032719d38fcf64ae64039..b57192edbe3bf9cf7e6783b9c8cb5dfb74478585 100644 (file)
 \r
     .code\r
 \r
+;------------------------------------------------------------------------------\r
+; VOID *\r
+; EFIAPI\r
+; InternalMemCopyMem (\r
+;   OUT     VOID                      *DestinationBuffer,\r
+;   IN      CONST VOID                *SourceBuffer,\r
+;   IN      UINTN                     Length\r
+;   );\r
+;------------------------------------------------------------------------------\r
 InternalMemCopyMem  PROC    USES    rsi rdi\r
     mov     rsi, rdx                    ; rsi <- Source\r
     mov     rdi, rcx                    ; rdi <- Destination\r
-    lea     r9, [rdi + r8 - 1]          ; r9 <- End of Destination\r
+    lea     r9, [rsi + r8 - 1]          ; r9 <- End of Source\r
     cmp     rsi, rdi\r
     mov     rax, rdi                    ; rax <- Destination as return value\r
     jae     @F\r
-    cmp     r9, rsi\r
+    cmp     r9, rdi\r
     jae     @CopyBackward               ; Copy backward if overlapped\r
-@@:\r
-    xor     rcx, rcx\r
-    sub     rcx, rsi\r
-    and     rcx, 7                      ; rcx + rsi aligns on 8-byte boundary\r
-    jz      @F\r
-    cmp     rcx, r8\r
-    cmova   rcx, r8\r
-    sub     r8, rcx                     ; r8 <- remaining bytes to copy\r
-    rep     movsb\r
 @@:\r
     mov     rcx, r8\r
     and     r8, 7\r
     shr     rcx, 3                      ; rcx <- # of Qwords to copy\r
     jz      @CopyBytes\r
-    DB      49h, 0fh, 7eh, 0c2h         ; movq    r10,  mm0    ; save mm0\r
+    DB      49h, 0fh, 7eh, 0c2h         ; movd r10, mm0 (Save mm0 in r10)\r
 @@:\r
-    DB      48h, 0fh, 6fh, 06h          ; movq    mm0, [rsi]\r
-    DB      48h, 0fh, 0e7h, 07h         ; movntq  [rdi], mm0\r
+    DB      0fh, 6fh, 06h               ; movd mm0, [rsi]\r
+    DB      0fh, 0e7h, 07h              ; movntq [rdi], mm0\r
     add     rsi, 8\r
     add     rdi, 8\r
     loop    @B\r
     mfence\r
-    DB      49h, 0fh, 6eh, 0c2h          ; movq    mm0, r10    ; restore mm0\r
+    DB      49h, 0fh, 6eh, 0c2h         ; movd mm0, r10 (Restore mm0)\r
     jmp     @CopyBytes\r
 @CopyBackward:\r
-    mov     rdi, r9                     ; rdi <- End of Destination\r
-    lea     rsi, [rsi + r8 - 1]         ; rsi <- End of Source\r
+    mov     rsi, r9                     ; rsi <- End of Source\r
+    lea     rdi, [rdi + r8 - 1]         ; rdi <- End of Destination\r
     std                                 ; set direction flag\r
 @CopyBytes:\r
     mov     rcx, r8\r