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