1
;------------------------------------------------------------------------------
3
; Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
4
; This program and the accompanying materials
5
; are licensed and made available under the terms and conditions of the BSD License
6
; which accompanies this distribution. The full text of the license may be found at
7
; http://opensource.org/licenses/bsd-license.php.
9
; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10
; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
22
;------------------------------------------------------------------------------
26
;------------------------------------------------------------------------------
29
; InternalMemCopyMem (
30
; IN VOID *Destination,
34
;------------------------------------------------------------------------------
35
InternalMemCopyMem PROC USES rsi rdi
36
mov rsi, rdx ; rsi <- Source
37
mov rdi, rcx ; rdi <- Destination
38
lea r9, [rsi + r8 - 1] ; r9 <- End of Source
40
mov rax, rdi ; rax <- Destination as return value
43
jae @CopyBackward ; Copy backward if overlapped
48
rep movsq ; Copy as many Qwords as possible
51
mov rsi, r9 ; rsi <- End of Source
52
lea rdi, [rdi + r8 - 1] ; esi <- End of Destination
53
std ; set direction flag
56
rep movsb ; Copy bytes backward
59
InternalMemCopyMem ENDP