X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdePkg%2FLibrary%2FBaseMemoryLibOptDxe%2FX64%2FSetMem.S;h=e2c4c47474d5fa6c00af6d68e180a049d7ca22d9;hp=345343192662024d79a588a0af6752fcf56d2f53;hb=2fb8d3e2dfb4476d02c240fd20fe0b5a24398d58;hpb=4d9ff8bee47c85768320434c2bfdf286a5cc0871 diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem.S b/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem.S index 3453431926..e2c4c47474 100644 --- a/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem.S +++ b/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem.S @@ -1,65 +1,58 @@ -;------------------------------------------------------------------------------ -; -; 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: -; -; SetMem.Asm -; -; Abstract: -; -; SetMem function -; -; Notes: -; -;------------------------------------------------------------------------------ - - .code - -;------------------------------------------------------------------------------ -; VOID * -; EFIAPI -; InternalMemSetMem ( -; IN VOID *Buffer, -; IN UINTN Count, -; IN UINT8 Value -; ) -;------------------------------------------------------------------------------ +#------------------------------------------------------------------------------ +# +# 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: +# +# SetMem.Asm +# +# Abstract: +# +# SetMem function +# +# Notes: +# +#------------------------------------------------------------------------------ +#------------------------------------------------------------------------------ +# VOID * +# EFIAPI +# InternalMemSetMem ( +# IN VOID *Buffer, +# IN UINTN Count, +# IN UINT8 Value +# ) +#------------------------------------------------------------------------------ .intel_syntax noprefix .globl ASM_PFX(InternalMemSetMem) ASM_PFX(InternalMemZeroMem): -InternalMemSetMem PROC USES rdi rbx push rdi push rbx - push rcx ; push Buffer - mov rax, r8 ; rax = Value - and rax, 0ffh ; rax = lower 8 bits of r8, upper 56 bits are 0 - mov ah, al ; ah = al - mov bx, ax ; bx = ax - shl rax, 10h ; rax = ax << 16 - mov ax, bx ; ax = bx - mov rbx, rax ; ebx = eax - shl rax, 20h ; rax = rax << 32 - or rax, rbx ; eax = ebx - mov rdi, rcx ; rdi = Buffer - mov rcx, rdx ; rcx = Count - shr rcx, 3 ; rcx = rcx / 8 + push rcx # push Buffer + mov rax, r8 # rax = Value + and rax, 0xff # rax = lower 8 bits of r8, upper 56 bits are 0 + mov ah, al # ah = al + mov bx, ax # bx = ax + shl rax, 0x10 # rax = ax << 16 + mov ax, bx # ax = bx + mov rbx, rax # ebx = eax + shl rax, 0x20 # rax = rax << 32 + or rax, rbx # eax = ebx + mov rdi, rcx # rdi = Buffer + mov rcx, rdx # rcx = Count + shr rcx, 3 # rcx = rcx / 8 cld rep stosq - mov rcx, rdx ; rcx = rdx - and rcx, 7 ; rcx = rcx & 7 + mov rcx, rdx # rcx = rdx + and rcx, 7 # rcx = rcx & 7 rep stosb - pop rax ; rax = Buffer + pop rax # rax = Buffer pop rbx pop rdi ret -InternalMemSetMem ENDP - - END