]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/BaseMemoryLibSse2/X64/SetMem16.nasm
BaseMemoryLibSse2: Take advantage of write combining buffers
[mirror_edk2.git] / MdePkg / Library / BaseMemoryLibSse2 / X64 / SetMem16.nasm
CommitLineData
e53526ca
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
e53526ca
JJ
5;\r
6; Module Name:\r
7;\r
8; SetMem16.nasm\r
9;\r
10; Abstract:\r
11;\r
12; SetMem16 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; InternalMemSetMem16 (\r
24; IN VOID *Buffer,\r
25; IN UINTN Count,\r
26; IN UINT16 Value\r
27; )\r
28;------------------------------------------------------------------------------\r
29global ASM_PFX(InternalMemSetMem16)\r
30ASM_PFX(InternalMemSetMem16):\r
31 push rdi\r
32 mov rdi, rcx\r
33 mov r9, rdi\r
34 xor rcx, rcx\r
35 sub rcx, rdi\r
d25fd871 36 and rcx, 63\r
e53526ca
JJ
37 mov rax, r8\r
38 jz .0\r
39 shr rcx, 1\r
40 cmp rcx, rdx\r
41 cmova rcx, rdx\r
42 sub rdx, rcx\r
43 rep stosw\r
44.0:\r
45 mov rcx, rdx\r
d25fd871
CJ
46 and edx, 31\r
47 shr rcx, 5\r
e53526ca
JJ
48 jz @SetWords\r
49 movd xmm0, eax\r
50 pshuflw xmm0, xmm0, 0\r
51 movlhps xmm0, xmm0\r
52.1:\r
53 movntdq [rdi], xmm0\r
d25fd871
CJ
54 movntdq [rdi + 16], xmm0\r
55 movntdq [rdi + 32], xmm0\r
56 movntdq [rdi + 48], xmm0\r
57 add rdi, 64\r
e53526ca
JJ
58 loop .1\r
59 mfence\r
60@SetWords:\r
61 mov ecx, edx\r
62 rep stosw\r
63 mov rax, r9\r
64 pop rdi\r
65 ret\r
66\r