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; SetMem64.asm 15; 16; Abstract: 17; 18; SetMem64 function 19; 20; Notes: 21; 22;------------------------------------------------------------------------------ 23 24 .686 25 .model flat,C 26 .xmm 27 .code 28 29;------------------------------------------------------------------------------ 30; VOID * 31; EFIAPI 32; InternalMemSetMem64 ( 33; IN VOID *Buffer, 34; IN UINTN Count, 35; IN UINT64 Value 36; ) 37;------------------------------------------------------------------------------ 38InternalMemSetMem64 PROC 39 mov eax, [esp + 4] ; eax <- Buffer 40 mov ecx, [esp + 8] ; ecx <- Count 41 test al, 8 42 mov edx, eax 43 movq xmm0, qword ptr [esp + 12] 44 jz @F 45 movq qword ptr [edx], xmm0 46 add edx, 8 47 dec ecx 48@@: 49 shr ecx, 1 50 jz @SetQwords 51 movlhps xmm0, xmm0 52@@: 53 movntdq [edx], xmm0 54 lea edx, [edx + 16] 55 loop @B 56 mfence 57@SetQwords: 58 jnc @F 59 movq qword ptr [edx], xmm0 60@@: 61 ret 62InternalMemSetMem64 ENDP 63 64 END 65