]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/BaseMemoryLibSse2/X64/ZeroMem.nasm
MdePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdePkg / Library / BaseMemoryLibSse2 / X64 / ZeroMem.nasm
CommitLineData
41a275ba
JJ
1;------------------------------------------------------------------------------\r
2;\r
3; Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>\r
9344f092 4; SPDX-License-Identifier: BSD-2-Clause-Patent\r
41a275ba
JJ
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, 15\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, 15\r
45 shr rcx, 4\r
46 jz @ZeroBytes\r
47 pxor xmm0, xmm0\r
48.1:\r
49 movntdq [rdi], xmm0 ; rdi should be 16-byte aligned\r
50 add rdi, 16\r
51 loop .1\r
52 mfence\r
53@ZeroBytes:\r
54 mov ecx, edx\r
55 rep stosb\r
56 mov rax, r8\r
57 pop rdi\r
58 ret\r
59\r