X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdePkg%2FLibrary%2FBaseMemoryLibSse2%2FIa32%2FSetMem64.S;h=fa60007f5ae09d6f24edc48641f3e8e0195a6a87;hp=2535a61aca49e232980eed7b759b8e5ee7155e87;hb=d08b357f8ac448f8e7180f920faa4b335e1fc65e;hpb=12e17a0aee55f17840745b0f6c1a15cd47a4aded diff --git a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.S b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.S index 2535a61aca..fa60007f5a 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.S +++ b/MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.S @@ -1,63 +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: -# -# SetMem64.asm -# -# Abstract: -# -# SetMem64 function -# -# Notes: -# -#------------------------------------------------------------------------------ - - .686: - #.MODEL flat,C - .xmm: - .code: - -#------------------------------------------------------------------------------ -# VOID * -# _mem_SetMem64 ( -# IN VOID *Buffer, -# IN UINTN Count, -# IN UINT64 Value -# ) -#------------------------------------------------------------------------------ -.global _InternalMemSetMem64 -_InternalMemSetMem64: - push %edi - movl 12(%esp), %ecx - movl 8(%esp), %edi - testl $8, %edi - movddup 16(%esp), %xmm0 - jz L0 - movq %xmm0, (%edi) - addl $8, %edi - decl %ecx -L0: - movl %ecx, %edx - shrl %ecx - jz @SetQwords -L1: - movntdq %xmm0, (%edi) - addl $16, %edi - loop L1 - mfence -@SetQwords: - testb $1, %dl - jz L2 - movq %xmm0, (%edi) -L2: - pop %edi - ret +#------------------------------------------------------------------------------ +# +# 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: +# +# SetMem64.S +# +# Abstract: +# +# SetMem64 function +# +# Notes: +# +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# VOID * +# InternalMemSetMem64 ( +# IN VOID *Buffer, +# IN UINTN Count, +# IN UINT64 Value +# ) +#------------------------------------------------------------------------------ +.globl _InternalMemSetMem64 +_InternalMemSetMem64: + movl 4(%esp), %eax + movl 8(%esp), %ecx + testb $8, %al + movl %eax, %edx + movq 0xc(%esp), %xmm0 + jz L1 + movq %xmm0, (%edx) + addl $8, %edx + decl %ecx +L1: + shrl %ecx + jz @SetQwords + movlhps %xmm0, %xmm0 +L2: + movntdq %xmm0, (%edx) + leal 16(%edx), %edx + loop L2 + mfence +@SetQwords: + jnc L3 + movq %xmm0, (%edx) +L3: + ret + + +