]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.nasm
MdePkg BaseMemoryLibSse2: Convert Ia32/ZeroMem.asm to NASM
[mirror_edk2.git] / MdePkg / Library / BaseMemoryLibSse2 / Ia32 / 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 SECTION .text
25
26 ;------------------------------------------------------------------------------
27 ; VOID *
28 ; EFIAPI
29 ; InternalMemZeroMem (
30 ; IN VOID *Buffer,
31 ; IN UINTN Count
32 ; );
33 ;------------------------------------------------------------------------------
34 global ASM_PFX(InternalMemZeroMem)
35 ASM_PFX(InternalMemZeroMem):
36 push edi
37 mov edi, [esp + 8]
38 mov edx, [esp + 12]
39 xor ecx, ecx
40 sub ecx, edi
41 xor eax, eax
42 and ecx, 15
43 jz .0
44 cmp ecx, edx
45 cmova ecx, edx
46 sub edx, ecx
47 rep stosb
48 .0:
49 mov ecx, edx
50 and edx, 15
51 shr ecx, 4
52 jz @ZeroBytes
53 pxor xmm0, xmm0
54 .1:
55 movntdq [edi], xmm0
56 add edi, 16
57 loop .1
58 mfence
59 @ZeroBytes:
60 mov ecx, edx
61 rep stosb
62 mov eax, [esp + 8]
63 pop edi
64 ret
65