]> git.proxmox.com Git - mirror_edk2.git/blame - OldMdePkg/Library/BaseMemoryLibMmx/X64/CopyMem.S
Moved the MdePkg to OldMdePkg so that new code in MdePkg does not break existing...
[mirror_edk2.git] / OldMdePkg / Library / BaseMemoryLibMmx / X64 / CopyMem.S
CommitLineData
02ad42ae 1#------------------------------------------------------------------------------
2#
3# Copyright (c) 2006, Intel Corporation
4# All rights reserved. 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
25#------------------------------------------------------------------------------
26# VOID *
27# EFIAPI
28# InternalMemCopyMem (
29# OUT VOID *DestinationBuffer,
30# IN CONST VOID *SourceBuffer,
31# IN UINTN Length
32# );
33#------------------------------------------------------------------------------
34.global _InternalMemCopyMem;
35_InternalMemCopyMem:
36 push %rsi
37 push %rdi
38 mov %rdi, %rsi
39 mov %rcx, %rdi
40 lea -1(%r8,%rsi,1),%r9
41 cmp %rdi, %rsi
42 mov %rdi, %rax
43 jae L1
44 cmp %rdi, %r9
45 jae LCopyBackward # Copy backward if overlapped
46L1:
47 mov %r8, %rcx
48 and $7, %r8
49 shr $3, %rcx
50 jz LCopyBytes
51 movd %mm0, %r10 # (Save mm0 in r10)
52L2:
53 movd (%rsi), %mm0
54 movntq %mm0, (%rdi)
55 add $8, %rsi
56 add $8, %rdi
57 loop L2
58 mfence
59 movd %r10, %mm0 #(Restore mm0)
60 jmp LCopyBytes
61LCopyBackward:
62 mov %r9, %rsi
63 lea -1(%r8,%rdi,1),%rdi
64 std # set direction flag
65LCopyBytes:
66 mov %r8, %rcx
67 rep
68 movsb # Copy bytes backward
69 cld
70 pop %rdi
71 pop %rsi
72 ret