[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