diff options
Diffstat (limited to 'src/VBox/Devices/EFI/Firmware/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem32.nasm')
-rw-r--r-- | src/VBox/Devices/EFI/Firmware/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem32.nasm | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem32.nasm b/src/VBox/Devices/EFI/Firmware/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem32.nasm new file mode 100644 index 00000000..1cd02b36 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/MdePkg/Library/BaseMemoryLibMmx/X64/SetMem32.nasm @@ -0,0 +1,47 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation. All rights reserved.<BR> +; SPDX-License-Identifier: BSD-2-Clause-Patent +; +; Module Name: +; +; SetMem32.nasm +; +; Abstract: +; +; SetMem32 function +; +; Notes: +; +;------------------------------------------------------------------------------ + + DEFAULT REL + SECTION .text + +;------------------------------------------------------------------------------ +; VOID * +; InternalMemSetMem32 ( +; IN VOID *Buffer, +; IN UINTN Count, +; IN UINT32 Value +; ) +;------------------------------------------------------------------------------ +global ASM_PFX(InternalMemSetMem32) +ASM_PFX(InternalMemSetMem32): + DB 0x49, 0xf, 0x6e, 0xc0 ; movd mm0, r8 (Value) + mov rax, rcx ; rax <- Buffer + xchg rcx, rdx ; rcx <- Count rdx <- Buffer + shr rcx, 1 ; rcx <- # of qwords to set + jz @SetDwords + DB 0xf, 0x70, 0xC0, 0x44 ; pshufw mm0, mm0, 44h +.0: + DB 0xf, 0xe7, 0x2 ; movntq [rdx], mm0 + lea rdx, [rdx + 8] ; use "lea" to avoid flag changes + loop .0 + mfence +@SetDwords: + jnc .1 + DB 0xf, 0x7e, 0x2 ; movd [rdx], mm0 +.1: + ret + |