]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - MdePkg/Library/BaseMemoryLibSse2/X64/ZeroMem.nasm
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdePkg / Library / BaseMemoryLibSse2 / X64 / ZeroMem.nasm
... / ...
CommitLineData
1;------------------------------------------------------------------------------\r
2;\r
3; Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>\r
4; SPDX-License-Identifier: BSD-2-Clause-Patent\r
5;\r
6; Module Name:\r
7;\r
8; ZeroMem.nasm\r
9;\r
10; Abstract:\r
11;\r
12; ZeroMem function\r
13;\r
14; Notes:\r
15;\r
16;------------------------------------------------------------------------------\r
17\r
18 DEFAULT REL\r
19 SECTION .text\r
20\r
21;------------------------------------------------------------------------------\r
22; VOID *\r
23; InternalMemZeroMem (\r
24; IN VOID *Buffer,\r
25; IN UINTN Count\r
26; )\r
27;------------------------------------------------------------------------------\r
28global ASM_PFX(InternalMemZeroMem)\r
29ASM_PFX(InternalMemZeroMem):\r
30 push rdi\r
31 mov rdi, rcx\r
32 xor rcx, rcx\r
33 xor eax, eax\r
34 sub rcx, rdi\r
35 and rcx, 63\r
36 mov r8, rdi\r
37 jz .0\r
38 cmp rcx, rdx\r
39 cmova rcx, rdx\r
40 sub rdx, rcx\r
41 rep stosb\r
42.0:\r
43 mov rcx, rdx\r
44 and edx, 63\r
45 shr rcx, 6\r
46 jz @ZeroBytes\r
47 pxor xmm0, xmm0\r
48.1:\r
49 movntdq [rdi], xmm0\r
50 movntdq [rdi + 16], xmm0\r
51 movntdq [rdi + 32], xmm0\r
52 movntdq [rdi + 48], xmm0\r
53 add rdi, 64\r
54 loop .1\r
55 mfence\r
56@ZeroBytes:\r
57 mov ecx, edx\r
58 rep stosb\r
59 mov rax, r8\r
60 pop rdi\r
61 ret\r
62\r