# HG changeset patch # Parent 637c88920cc89077f2c50c16556cb05739c8bc72 diff -r 637c88920cc8 src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp --- a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp Thu Apr 23 16:29:22 2020 -0400 +++ b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp Wed Apr 29 18:30:08 2020 +0200 @@ -69,3 +69,7 @@ JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_native(oopDesc * src, oop* load_addr)) return (oopDesc*) ShenandoahBarrierSet::barrier_set()->load_reference_barrier_native(oop(src), load_addr); JRT_END + +JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_jvmci(JavaThread* thread, oopDesc* obj)) + return (oopDesc*) ShenandoahBarrierSet::barrier_set()->load_reference_barrier(oop(obj)); +JRT_END diff -r 637c88920cc8 src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp --- a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp Thu Apr 23 16:29:22 2020 -0400 +++ b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.hpp Wed Apr 29 18:30:08 2020 +0200 @@ -43,6 +43,8 @@ static oopDesc* load_reference_barrier_native(oopDesc* src, oop* load_addr); + static oopDesc* load_reference_barrier_jvmci(JavaThread* thread, oopDesc* obj); + static void shenandoah_clone_barrier(oopDesc* src); }; diff -r 637c88920cc8 src/hotspot/share/jvmci/jvmciRuntime.cpp --- a/src/hotspot/share/jvmci/jvmciRuntime.cpp Thu Apr 23 16:29:22 2020 -0400 +++ b/src/hotspot/share/jvmci/jvmciRuntime.cpp Wed Apr 29 18:30:08 2020 +0200 @@ -43,6 +43,10 @@ #if INCLUDE_G1GC #include "gc/g1/g1ThreadLocalData.hpp" #endif // INCLUDE_G1GC +#if INCLUDE_SHENANDOAHGC +#include "gc/shenandoah/shenandoahThreadLocalData.hpp" +#include "gc/shenandoah/shenandoahRuntime.hpp" +#endif // INCLUDE_G1GC // Simple helper to see if the caller of a runtime stub which // entered the VM has been deoptimized @@ -482,6 +486,18 @@ #endif // INCLUDE_G1GC +#if INCLUDE_G1GC + +JRT_LEAF(void, JVMCIRuntime::shenandoah_concmark_barrier(JavaThread* thread, oopDesc* obj)) + ShenandoahThreadLocalData::satb_mark_queue(thread).enqueue(obj); +JRT_END + +JRT_LEAF(oopDesc*, JVMCIRuntime::shenandoah_load_reference_barrier(JavaThread* thread, oopDesc* obj)) + return ShenandoahRuntime::load_reference_barrier_jvmci(thread, obj); +JRT_END + +#endif // INCLUDE_G1GC + JRT_LEAF(jboolean, JVMCIRuntime::validate_object(JavaThread* thread, oopDesc* parent, oopDesc* child)) bool ret = true; if(!Universe::heap()->is_in(parent)) { diff -r 637c88920cc8 src/hotspot/share/jvmci/jvmciRuntime.hpp --- a/src/hotspot/share/jvmci/jvmciRuntime.hpp Thu Apr 23 16:29:22 2020 -0400 +++ b/src/hotspot/share/jvmci/jvmciRuntime.hpp Wed Apr 29 18:30:08 2020 +0200 @@ -329,6 +329,10 @@ static void write_barrier_pre(JavaThread* thread, oopDesc* obj); static void write_barrier_post(JavaThread* thread, void* card); #endif +#if INCLUDE_SHENANDOAHGC + static void shenandoah_concmark_barrier(JavaThread* thread, oopDesc* obj); + static oopDesc* shenandoah_load_reference_barrier(JavaThread* thread, oopDesc* obj); +#endif static jboolean validate_object(JavaThread* thread, oopDesc* parent, oopDesc* child); // used to throw exceptions from compiled JVMCI code diff -r 637c88920cc8 src/hotspot/share/jvmci/jvmci_globals.cpp --- a/src/hotspot/share/jvmci/jvmci_globals.cpp Thu Apr 23 16:29:22 2020 -0400 +++ b/src/hotspot/share/jvmci/jvmci_globals.cpp Wed Apr 29 18:30:08 2020 +0200 @@ -198,7 +198,7 @@ void JVMCIGlobals::check_jvmci_supported_gc() { if (EnableJVMCI) { // Check if selected GC is supported by JVMCI and Java compiler - if (!(UseSerialGC || UseParallelGC || UseG1GC)) { + if (!(UseSerialGC || UseParallelGC || UseG1GC || UseShenandoahGC)) { vm_exit_during_initialization("JVMCI Compiler does not support selected GC", GCConfig::hs_err_name()); FLAG_SET_DEFAULT(EnableJVMCI, false); FLAG_SET_DEFAULT(UseJVMCICompiler, false); diff -r 637c88920cc8 src/hotspot/share/jvmci/vmStructs_jvmci.cpp --- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp Thu Apr 23 16:29:22 2020 -0400 +++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp Wed Apr 29 18:30:08 2020 +0200 @@ -38,6 +38,9 @@ #include "gc/g1/heapRegion.hpp" #include "gc/g1/g1ThreadLocalData.hpp" #endif +#if INCLUDE_SHENANDOAHGC +#include "gc/shenandoah/shenandoahThreadLocalData.hpp" +#endif #define VM_STRUCTS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field) \ static_field(CompilerToVM::Data, Klass_vtable_start_offset, int) \ @@ -672,6 +675,7 @@ declare_function(JVMCIRuntime::load_and_clear_exception) \ G1GC_ONLY(declare_function(JVMCIRuntime::write_barrier_pre)) \ G1GC_ONLY(declare_function(JVMCIRuntime::write_barrier_post)) \ + SHENANDOAHGC_ONLY(declare_function(JVMCIRuntime::shenandoah_concmark_barrier)) \ declare_function(JVMCIRuntime::validate_object) \ \ declare_function(JVMCIRuntime::test_deoptimize_call_int) @@ -692,6 +696,15 @@ #endif // INCLUDE_G1GC +#if INCLUDE_SHENANDOAHGC + +#define VM_INT_CONSTANTS_JVMCI_SHENANDOAHGC(declare_constant, declare_constant_with_value, declare_preprocessor_constant) \ + declare_constant_with_value("ShenandoahThreadLocalData::satb_mark_queue_active_offset", in_bytes(ShenandoahThreadLocalData::satb_mark_queue_active_offset())) \ + declare_constant_with_value("ShenandoahThreadLocalData::satb_mark_queue_index_offset", in_bytes(ShenandoahThreadLocalData::satb_mark_queue_index_offset())) \ + declare_constant_with_value("ShenandoahThreadLocalData::satb_mark_queue_buffer_offset", in_bytes(ShenandoahThreadLocalData::satb_mark_queue_buffer_offset())) \ + declare_constant_with_value("ShenandoahThreadLocalData::gc_state_offset", in_bytes(ShenandoahThreadLocalData::gc_state_offset())) \ + +#endif // INCLUDE_SHENANDOAHGC #ifdef LINUX @@ -921,6 +934,12 @@ GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY) #endif +#if INCLUDE_SHENANDOAHGC + VM_INT_CONSTANTS_JVMCI_SHENANDOAHGC(GENERATE_VM_INT_CONSTANT_ENTRY, + GENERATE_VM_INT_CONSTANT_WITH_VALUE_ENTRY, + GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY) +#endif + GENERATE_VM_INT_CONSTANT_LAST_ENTRY() };