svn commit: r338683 - head/sys/amd64/amd64
Mateusz Guzik
mjg at FreeBSD.org
Fri Sep 14 15:29:36 UTC 2018
Author: mjg
Date: Fri Sep 14 15:29:35 2018
New Revision: 338683
URL: https://svnweb.freebsd.org/changeset/base/338683
Log:
amd64: implement pagezero_erms
Intel docs claim such a memset (rep stosb + 4096 bytes) is
special-cased by microarchs. They also switched Linux to use
it for this purpose.
Approved by: re (gjb)
Modified:
head/sys/amd64/amd64/machdep.c
head/sys/amd64/amd64/support.S
Modified: head/sys/amd64/amd64/machdep.c
==============================================================================
--- head/sys/amd64/amd64/machdep.c Fri Sep 14 15:15:16 2018 (r338682)
+++ head/sys/amd64/amd64/machdep.c Fri Sep 14 15:29:35 2018 (r338683)
@@ -2693,3 +2693,12 @@ DEFINE_IFUNC(, void *, memcpy, (void * _Nonnull, const
return ((cpu_stdext_feature & CPUID_STDEXT_ERMS) != 0 ?
memcpy_erms : memcpy_std);
}
+
+void pagezero_std(void *addr);
+void pagezero_erms(void *addr);
+DEFINE_IFUNC(, void , pagezero, (void *), static)
+{
+
+ return ((cpu_stdext_feature & CPUID_STDEXT_ERMS) != 0 ?
+ pagezero_erms : pagezero_std);
+}
Modified: head/sys/amd64/amd64/support.S
==============================================================================
--- head/sys/amd64/amd64/support.S Fri Sep 14 15:15:16 2018 (r338682)
+++ head/sys/amd64/amd64/support.S Fri Sep 14 15:29:35 2018 (r338683)
@@ -41,7 +41,7 @@
.text
/* Address: %rdi */
-ENTRY(pagezero)
+ENTRY(pagezero_std)
PUSH_FRAME_POINTER
movq $PAGE_SIZE/8,%rcx
xorl %eax,%eax
@@ -49,7 +49,17 @@ ENTRY(pagezero)
stosq
POP_FRAME_POINTER
ret
-END(pagezero)
+END(pagezero_std)
+
+ENTRY(pagezero_erms)
+ PUSH_FRAME_POINTER
+ movq $PAGE_SIZE,%rcx
+ xorl %eax,%eax
+ rep
+ stosb
+ POP_FRAME_POINTER
+ ret
+END(pagezero_erms)
/*
* pagecopy(%rdi=from, %rsi=to)
More information about the svn-src-head
mailing list