1 ;------------------------------------------------------------------------------ 2 ; 3 ; Copyright (c) 2006 - 2008, 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 ; SetMem.Asm 15 ; 16 ; Abstract: 17 ; 18 ; SetMem function 19 ; 20 ; Notes: 21 ; 22 ;------------------------------------------------------------------------------ 23 24 .code 25 26 ;------------------------------------------------------------------------------ 27 ; VOID * 28 ; EFIAPI 29 ; InternalMemSetMem ( 30 ; IN VOID *Buffer, 31 ; IN UINTN Count, 32 ; IN UINT8 Value 33 ; ) 34 ;------------------------------------------------------------------------------ 35 InternalMemSetMem PROC USES rdi rbx 36 push rcx ; push Buffer 37 mov rax, r8 ; rax = Value 38 and rax, 0ffh ; rax = lower 8 bits of r8, upper 56 bits are 0 39 mov ah, al ; ah = al 40 mov bx, ax ; bx = ax 41 shl rax, 10h ; rax = ax << 16 42 mov ax, bx ; ax = bx 43 mov rbx, rax ; ebx = eax 44 shl rax, 20h ; rax = rax << 32 45 or rax, rbx ; eax = ebx 46 mov rdi, rcx ; rdi = Buffer 47 mov rcx, rdx ; rcx = Count 48 shr rcx, 3 ; rcx = rcx / 8 49 cld 50 rep stosq 51 mov rcx, rdx ; rcx = rdx 52 and rcx, 7 ; rcx = rcx & 7 53 rep stosb 54 pop rax ; rax = Buffer 55 ret 56 InternalMemSetMem ENDP 57 58 END 59