~ubuntu-branches/ubuntu/trusty/virtualbox-lts-xenial/trusty-updates

« back to all changes in this revision

Viewing changes to src/VBox/Devices/EFI/Firmware/MdePkg/Library/BaseMemoryLibRepStr/X64/CopyMem.asm

  • Committer: Package Import Robot
  • Author(s): Gianfranco Costamagna
  • Date: 2016-02-23 14:28:26 UTC
  • Revision ID: package-import@ubuntu.com-20160223142826-bdu69el2z6wa2a44
Tags: upstream-4.3.36-dfsg
ImportĀ upstreamĀ versionĀ 4.3.36-dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
;------------------------------------------------------------------------------
 
2
;
 
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.
 
8
;
 
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.
 
11
;
 
12
; Module Name:
 
13
;
 
14
;   CopyMem.Asm
 
15
;
 
16
; Abstract:
 
17
;
 
18
;   CopyMem function
 
19
;
 
20
; Notes:
 
21
;
 
22
;------------------------------------------------------------------------------
 
23
 
 
24
    .code
 
25
 
 
26
;------------------------------------------------------------------------------
 
27
;  VOID *
 
28
;  EFIAPI
 
29
;  InternalMemCopyMem (
 
30
;    IN VOID   *Destination,
 
31
;    IN VOID   *Source,
 
32
;    IN UINTN  Count
 
33
;    )
 
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
 
39
    cmp     rsi, rdi
 
40
    mov     rax, rdi                    ; rax <- Destination as return value
 
41
    jae     @F
 
42
    cmp     r9, rdi
 
43
    jae     @CopyBackward               ; Copy backward if overlapped
 
44
@@:
 
45
    mov     rcx, r8
 
46
    and     r8, 7
 
47
    shr     rcx, 3
 
48
    rep     movsq                       ; Copy as many Qwords as possible
 
49
    jmp     @CopyBytes
 
50
@CopyBackward:
 
51
    mov     rsi, r9                     ; rsi <- End of Source
 
52
    lea     rdi, [rdi + r8 - 1]         ; esi <- End of Destination
 
53
    std                                 ; set direction flag
 
54
@CopyBytes:
 
55
    mov     rcx, r8
 
56
    rep     movsb                       ; Copy bytes backward
 
57
    cld
 
58
    ret
 
59
InternalMemCopyMem  ENDP
 
60
 
 
61
    END