• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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;------------------------------------------------------------------------------
34global ASM_PFX(InternalMemZeroMem)
35ASM_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
66