From 51258295bd41ab76de7a422f53ae81556dc1009f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Thu, 24 Jun 2021 11:41:24 +0200 Subject: [PATCH] [NTOS:KE] Rewrite KeZeroPages in assembly We spend a lot of time in this function, let's optimize it. --- ntoskrnl/ke/i386/cpu.c | 9 --------- ntoskrnl/ke/i386/zeropage.S | 32 ++++++++++++++++++++++++++++++++ ntoskrnl/ntos.cmake | 1 + 3 files changed, 33 insertions(+), 9 deletions(-) create mode 100644 ntoskrnl/ke/i386/zeropage.S diff --git a/ntoskrnl/ke/i386/cpu.c b/ntoskrnl/ke/i386/cpu.c index bdc92f908fd..ac1d9ee4dfd 100644 --- a/ntoskrnl/ke/i386/cpu.c +++ b/ntoskrnl/ke/i386/cpu.c @@ -1133,15 +1133,6 @@ KeInvalidateAllCaches(VOID) return TRUE; } -VOID -FASTCALL -KeZeroPages(IN PVOID Address, - IN ULONG Size) -{ - /* Not using XMMI in this routine */ - RtlZeroMemory(Address, Size); -} - VOID NTAPI KiSaveProcessorState(IN PKTRAP_FRAME TrapFrame, diff --git a/ntoskrnl/ke/i386/zeropage.S b/ntoskrnl/ke/i386/zeropage.S new file mode 100644 index 00000000000..c999b22eec1 --- /dev/null +++ b/ntoskrnl/ke/i386/zeropage.S @@ -0,0 +1,32 @@ +/* + * PROJECT: ReactOS Kernel + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: Fast zeroing of pages + * COPYRIGHT: Copyright 2021 Jérôme Gardou + */ + +#include + +/* FUNCTIONS ****************************************************************/ +.code + +/* + * VOID + * FASTCALL + * KeZeroPages(void* ptr, ULONG Size) + */ +PUBLIC @KeZeroPages@8 +FUNC @KeZeroPages@8 + FPO 0, 0, 0, 0, 0, FRAME_FPO + + push edi + mov edi, ecx + mov ecx, edx + shr ecx, 2 + xor eax, eax + rep stosd + pop edi + ret +ENDFUNC + +END diff --git a/ntoskrnl/ntos.cmake b/ntoskrnl/ntos.cmake index 4b56e74896e..7803e4c812e 100644 --- a/ntoskrnl/ntos.cmake +++ b/ntoskrnl/ntos.cmake @@ -298,6 +298,7 @@ if(ARCH STREQUAL "i386") ${REACTOS_SOURCE_DIR}/ntoskrnl/ke/i386/ctxswitch.S ${REACTOS_SOURCE_DIR}/ntoskrnl/ke/i386/trap.s ${REACTOS_SOURCE_DIR}/ntoskrnl/ke/i386/usercall_asm.S + ${REACTOS_SOURCE_DIR}/ntoskrnl/ke/i386/zeropage.S ${REACTOS_SOURCE_DIR}/ntoskrnl/rtl/i386/stack.S) list(APPEND SOURCE ${REACTOS_SOURCE_DIR}/ntoskrnl/config/i386/cmhardwr.c