diff -r 23e3ab980622 -r 9b7b9f16dfd9 src/hotspot/share/prims/unsafe.cpp --- a/src/hotspot/share/prims/unsafe.cpp Tue Aug 20 10:46:23 2019 +0200 +++ b/src/hotspot/share/prims/unsafe.cpp Tue Aug 20 10:11:53 2019 +0100 @@ -44,6 +44,7 @@ #include "runtime/jniHandles.inline.hpp" #include "runtime/orderAccess.hpp" #include "runtime/reflection.hpp" +#include "runtime/sharedRuntime.hpp" #include "runtime/thread.hpp" #include "runtime/threadSMR.hpp" #include "runtime/vm_version.hpp" @@ -445,6 +446,46 @@ } } UNSAFE_END +UNSAFE_LEAF (void, Unsafe_WriteBack0(JNIEnv *env, jobject unsafe, jlong line)) { + assert(VM_Version::supports_data_cache_line_flush(), "should not get here"); +#ifdef ASSERT + if (TraceMemoryWriteback) { + tty->print_cr("Unsafe: writeback 0x%p", addr_from_java(line)); + } +#endif + + assert(StubRoutines::data_cache_writeback() != NULL, "sanity"); + (StubRoutines::DataCacheWriteback_stub())(addr_from_java(line)); +} UNSAFE_END + +static void doWriteBackSync0(bool is_pre) +{ + assert(StubRoutines::data_cache_writeback_sync() != NULL, "sanity"); + (StubRoutines::DataCacheWritebackSync_stub())(is_pre); +} + +UNSAFE_LEAF (void, Unsafe_WriteBackPreSync0(JNIEnv *env, jobject unsafe)) { + assert(VM_Version::supports_data_cache_line_flush(), "should not get here"); +#ifdef ASSERT + if (TraceMemoryWriteback) { + tty->print_cr("Unsafe: writeback pre-sync"); + } +#endif + + doWriteBackSync0(true); +} UNSAFE_END + +UNSAFE_LEAF (void, Unsafe_WriteBackPostSync0(JNIEnv *env, jobject unsafe)) { + assert(VM_Version::supports_data_cache_line_flush(), "should not get here"); +#ifdef ASSERT + if (TraceMemoryWriteback) { + tty->print_cr("Unsafe: writeback pre-sync"); + } +#endif + + doWriteBackSync0(false); +} UNSAFE_END + ////// Random queries static jlong find_field_offset(jclass clazz, jstring name, TRAPS) { @@ -1073,6 +1114,9 @@ {CC "copyMemory0", CC "(" OBJ "J" OBJ "JJ)V", FN_PTR(Unsafe_CopyMemory0)}, {CC "copySwapMemory0", CC "(" OBJ "J" OBJ "JJJ)V", FN_PTR(Unsafe_CopySwapMemory0)}, + {CC "writeback0", CC "(" "J" ")V", FN_PTR(Unsafe_WriteBack0)}, + {CC "writebackPreSync0", CC "()V", FN_PTR(Unsafe_WriteBackPreSync0)}, + {CC "writebackPostSync0", CC "()V", FN_PTR(Unsafe_WriteBackPostSync0)}, {CC "setMemory0", CC "(" OBJ "JJB)V", FN_PTR(Unsafe_SetMemory0)}, {CC "defineAnonymousClass0", CC "(" DAC_Args ")" CLS, FN_PTR(Unsafe_DefineAnonymousClass0)},