]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem.asm
Update copyright for files modified in this year
[mirror_edk2.git] / MdePkg / Library / BaseMemoryLibOptDxe / X64 / SetMem.asm
CommitLineData
631f060b 1;------------------------------------------------------------------------------\r
2;\r
373ade0e 3; Copyright (c) 2006 - 2008, Intel Corporation\r
631f060b 4; All rights reserved. This program and the accompanying materials\r
5; are licensed and made available under the terms and conditions of the BSD License\r
6; which accompanies this distribution. The full text of the license may be found at\r
7; http://opensource.org/licenses/bsd-license.php\r
8;\r
9; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11;\r
12; Module Name:\r
13;\r
14; SetMem.Asm\r
15;\r
16; Abstract:\r
17;\r
18; SetMem function\r
19;\r
20; Notes:\r
21;\r
22;------------------------------------------------------------------------------\r
23\r
24 .code\r
25\r
26;------------------------------------------------------------------------------\r
27; VOID *\r
28; EFIAPI\r
29; InternalMemSetMem (\r
30; IN VOID *Buffer,\r
31; IN UINTN Count,\r
32; IN UINT8 Value\r
33; )\r
34;------------------------------------------------------------------------------\r
35InternalMemSetMem PROC USES rdi rbx\r
36 push rcx ; push Buffer\r
37 mov rax, r8 ; rax = Value\r
38 and rax, 0ffh ; rax = lower 8 bits of r8, upper 56 bits are 0\r
39 mov ah, al ; ah = al\r
40 mov bx, ax ; bx = ax\r
41 shl rax, 10h ; rax = ax << 16\r
42 mov ax, bx ; ax = bx\r
43 mov rbx, rax ; ebx = eax\r
44 shl rax, 20h ; rax = rax << 32\r
45 or rax, rbx ; eax = ebx\r
46 mov rdi, rcx ; rdi = Buffer\r
47 mov rcx, rdx ; rcx = Count\r
48 shr rcx, 3 ; rcx = rcx / 8\r
49 cld\r
6f890d5b 50 rep stosq \r
631f060b 51 mov rcx, rdx ; rcx = rdx\r
52 and rcx, 7 ; rcx = rcx & 7\r
6f890d5b 53 rep stosb \r
631f060b 54 pop rax ; rax = Buffer\r
55 ret\r
56InternalMemSetMem ENDP\r
57\r
58 END\r