diff --git a/src/hotspot/os_cpu/windows_aarch64/prefetch_windows_aarch64.inline.hpp b/src/hotspot/os_cpu/windows_aarch64/prefetch_windows_aarch64.inline.hpp index a360ee342be68..a2c8f0c685c4a 100644 --- a/src/hotspot/os_cpu/windows_aarch64/prefetch_windows_aarch64.inline.hpp +++ b/src/hotspot/os_cpu/windows_aarch64/prefetch_windows_aarch64.inline.hpp @@ -27,10 +27,24 @@ // Included in runtime/prefetch.inline.hpp +#include + +// __prefetch2(addr, prfop) emits a PRFM instruction. +// The prfop encoding is: +// type: PLD = 00, PLI = 01, PST = 10 +// target: L1 = 00, L2 = 01, L3 = 10 +// policy: KEEP = 0, STRM = 1 + inline void Prefetch::read (const void *loc, intx interval) { + if (interval >= 0) { + __prefetch2((const char*) loc + interval, /* PLD + L1 + KEEP */ 0); + } } inline void Prefetch::write(void *loc, intx interval) { + if (interval >= 0) { + __prefetch2((char*) loc + interval, /* PST + L1 + KEEP */ 16); + } } #endif // OS_CPU_WINDOWS_AARCH64_PREFETCH_WINDOWS_AARCH64_INLINE_HPP diff --git a/src/hotspot/os_cpu/windows_x86/prefetch_windows_x86.inline.hpp b/src/hotspot/os_cpu/windows_x86/prefetch_windows_x86.inline.hpp index 645fbe99a223d..7ae566b40c606 100644 --- a/src/hotspot/os_cpu/windows_x86/prefetch_windows_x86.inline.hpp +++ b/src/hotspot/os_cpu/windows_x86/prefetch_windows_x86.inline.hpp @@ -27,7 +27,14 @@ // Included in runtime/prefetch.inline.hpp -inline void Prefetch::read (const void *loc, intx interval) {} -inline void Prefetch::write(void *loc, intx interval) {} +#include + +inline void Prefetch::read (const void *loc, intx interval) { + _mm_prefetch((const char*) loc + interval, _MM_HINT_T0); +} + +inline void Prefetch::write(void *loc, intx interval) { + _mm_prefetch((const char*) loc + interval, _MM_HINT_T0); +} #endif // OS_CPU_WINDOWS_X86_PREFETCH_WINDOWS_X86_INLINE_HPP