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