]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Library/BaseMemoryLibSse2/X64/ZeroMem.nasm
63888cbe6848740d072ac1f51f47177d780f7151
[mirror_edk2.git] / MdePkg / Library / BaseMemoryLibSse2 / X64 / ZeroMem.nasm
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 ; ZeroMem.nasm
15 ;
16 ; Abstract:
17 ;
18 ; ZeroMem function
19 ;
20 ; Notes:
21 ;
22 ;------------------------------------------------------------------------------
23
24 DEFAULT REL
25 SECTION .text
26
27 ;------------------------------------------------------------------------------
28 ; VOID *
29 ; InternalMemZeroMem (
30 ; IN VOID *Buffer,
31 ; IN UINTN Count
32 ; )
33 ;------------------------------------------------------------------------------
34 global ASM_PFX(InternalMemZeroMem)
35 ASM_PFX(InternalMemZeroMem):
36 push rdi
37 mov rdi, rcx
38 xor rcx, rcx
39 xor eax, eax
40 sub rcx, rdi
41 and rcx, 15
42 mov r8, rdi
43 jz .0
44 cmp rcx, rdx
45 cmova rcx, rdx
46 sub rdx, rcx
47 rep stosb
48 .0:
49 mov rcx, rdx
50 and edx, 15
51 shr rcx, 4
52 jz @ZeroBytes
53 pxor xmm0, xmm0
54 .1:
55 movntdq [rdi], xmm0 ; rdi should be 16-byte aligned
56 add rdi, 16
57 loop .1
58 mfence
59 @ZeroBytes:
60 mov ecx, edx
61 rep stosb
62 mov rax, r8
63 pop rdi
64 ret
65