X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdePkg%2FLibrary%2FBaseMemoryLibMmx%2FIa32%2FSetMem32.asm;fp=MdePkg%2FLibrary%2FBaseMemoryLibMmx%2FIa32%2FSetMem32.asm;h=7f24fcd74425c0b5b53b907ff596e96d053cb4d6;hp=0000000000000000000000000000000000000000;hb=6e3b8c471637564fd395e40afd467527df7ec8b1;hpb=754c0cfed41c5d23f51dadd63d7c275c82fb078d diff --git a/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.asm b/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.asm new file mode 100644 index 0000000000..7f24fcd744 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.asm @@ -0,0 +1,59 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation +; All rights reserved. This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; SetMem32.asm +; +; Abstract: +; +; SetMem32 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .686 + .model flat,C + .xmm + .code + +;------------------------------------------------------------------------------ +; VOID * +; _mem_SetMem32 ( +; IN VOID *Buffer, +; IN UINTN Count, +; IN UINT32 Value +; ) +;------------------------------------------------------------------------------ +InternalMemSetMem32 PROC USES edi + mov edx, [esp + 12] + mov edi, [esp + 8] + mov ecx, edx + shr ecx, 1 + movd mm0, [esp + 16] + mov eax, edi + jz @SetDwords + pshufw mm0, mm0, 44h +@@: + movntq [edi], mm0 + add edi, 8 + loop @B + mfence +@SetDwords: + test dl, 1 + jz @F + movd [edi], mm0 +@@: + ret +InternalMemSetMem32 ENDP + + END