X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdePkg%2FLibrary%2FBaseMemoryLibOptPei%2FX64%2FCopyMem.S;h=fad30a5f3187ca7f1a1dc7b7ca3c97bc82348d36;hp=2ab574621e4d568dd371b4b4a816553f0b10eb43;hb=2fc59a003ed9104f9feebe0e418f2a04a50f3284;hpb=132f41f0a92082775d931067089a63ca50367225 diff --git a/MdePkg/Library/BaseMemoryLibOptPei/X64/CopyMem.S b/MdePkg/Library/BaseMemoryLibOptPei/X64/CopyMem.S index 2ab574621e..fad30a5f31 100644 --- a/MdePkg/Library/BaseMemoryLibOptPei/X64/CopyMem.S +++ b/MdePkg/Library/BaseMemoryLibOptPei/X64/CopyMem.S @@ -3,11 +3,11 @@ # #------------------------------------------------------------------------------ # -# Copyright (c) 2006 - 2008, Intel Corporation -# All rights reserved. This program and the accompanying materials +# Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.
+# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php +# http://opensource.org/licenses/bsd-license.php. # # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. @@ -34,34 +34,33 @@ # IN UINTN Count # ) #------------------------------------------------------------------------------ -.intel_syntax noprefix ASM_GLOBAL ASM_PFX(InternalMemCopyMem) ASM_PFX(InternalMemCopyMem): - push rsi - push 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 + pushq %rsi + pushq %rdi + movq %rdx, %rsi # rsi <- Source + movq %rcx, %rdi # rdi <- Destination + leaq -1(%rsi, %r8,), %r9 # r9 <- End of Source + cmpq %rdi, %rsi + movq %rdi, %rax # rax <- Destination as return value jae _InternalMemCopyMem_al_0000 - cmp r9, rdi + cmpq %rdi, %r9 jae _atSym_CopyBackward # Copy backward if overlapped _InternalMemCopyMem_al_0000: - mov rcx, r8 - and r8, 7 - shr rcx, 3 + movq %r8, %rcx + andq $7, %r8 + shrq $3, %rcx rep movsq # Copy as many Qwords as possible jmp _atSym_CopyBytes _atSym_CopyBackward: - mov rsi, r9 # rsi <- End of Source - lea rdi, [rdi + r8 - 1] # esi <- End of Destination + movq %r9, %rsi # rsi <- End of Source + leaq -1(%rdi, %r8), %rdi # rdi <- End of Destination std # set direction flag _atSym_CopyBytes: - mov rcx, r8 + movq %r8, %rcx rep movsb # Copy bytes backward cld - pop rdi - pop rsi + popq %rdi + popq %rsi ret