Home | History | Annotate | Download | only in Ia32
      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 
     66