[aarch64-port-dev ] Enable prefetching
Andrew Haley
aph at redhat.com
Mon Nov 18 02:30:59 PST 2013
This enables the garbage collector to prefetch data.
The distance of 256 bytes is a guess based on experience with other CPUs.
Andrew.
# HG changeset patch
# User aph
# Date 1384519458 18000
# Fri Nov 15 07:44:18 2013 -0500
# Node ID 65546f5b752a425c5ad1f4c6859dc6c0c6d198bd
# Parent 7f87d432d9dbcdecc71d4a9e563e0da957cfc107
Enable prefetching
diff -r 7f87d432d9db -r 65546f5b752a src/cpu/aarch64/vm/vm_version_aarch64.cpp
--- a/src/cpu/aarch64/vm/vm_version_aarch64.cpp Fri Nov 15 06:54:25 2013 -0500
+++ b/src/cpu/aarch64/vm/vm_version_aarch64.cpp Fri Nov 15 07:44:18 2013 -0500
@@ -88,6 +88,8 @@
_supports_atomic_getadd8 = true;
FLAG_SET_DEFAULT(AllocatePrefetchDistance, 256);
+ FLAG_SET_DEFAULT(PrefetchScanIntervalInBytes, 256);
+ FLAG_SET_DEFAULT(PrefetchFieldsAhead, 256);
}
void VM_Version::initialize() {
diff -r 7f87d432d9db -r 65546f5b752a src/os_cpu/linux_aarch64/vm/prefetch_linux_aarch64.inline.hpp
--- a/src/os_cpu/linux_aarch64/vm/prefetch_linux_aarch64.inline.hpp Fri Nov 15 06:54:25 2013 -0500
+++ b/src/os_cpu/linux_aarch64/vm/prefetch_linux_aarch64.inline.hpp Fri Nov 15 07:44:18 2013 -0500
@@ -29,9 +29,15 @@
inline void Prefetch::read (void *loc, intx interval) {
+#ifndef BUILTIN_SIM
+ asm("prfm PLDL1KEEP, [%0, %1]" : : "r"(loc), "r"(interval));
+#endif
}
inline void Prefetch::write(void *loc, intx interval) {
+#ifndef BUILTIN_SIM
+ asm("prfm PSTL1KEEP, [%0, %1]" : : "r"(loc), "r"(interval));
+#endif
}
#endif // OS_CPU_LINUX_AARCH64_VM_PREFETCH_LINUX_AARCH64_INLINE_HPP
More information about the aarch64-port-dev
mailing list