< prev index next >
src/cpu/x86/vm/c1_Runtime1_x86.cpp
Print this page
@@ -38,10 +38,11 @@
#include "runtime/vframeArray.hpp"
#include "utilities/macros.hpp"
#include "vmreg_x86.inline.hpp"
#if INCLUDE_ALL_GCS
#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp"
+#include "gc_implementation/shenandoah/shenandoahRuntime.hpp"
#endif
// Implementation of StubAssembler
@@ -1613,11 +1614,11 @@
{
StubFrame f(sasm, "g1_pre_barrier", dont_gc_arguments);
// arg0 : previous value of memory
BarrierSet* bs = Universe::heap()->barrier_set();
- if (bs->kind() != BarrierSet::G1SATBCTLogging) {
+ if (bs->kind() != BarrierSet::G1SATBCTLogging && bs->kind() != BarrierSet::ShenandoahBarrierSet) {
__ movptr(rax, (int)id);
__ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), rax);
__ should_not_reach_here();
break;
}
@@ -1690,10 +1691,16 @@
// arg0: store_address
Address store_addr(rbp, 2*BytesPerWord);
BarrierSet* bs = Universe::heap()->barrier_set();
+ if (bs->kind() == BarrierSet::ShenandoahBarrierSet) {
+ __ movptr(rax, (int)id);
+ __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), rax);
+ __ should_not_reach_here();
+ break;
+ }
CardTableModRefBS* ct = (CardTableModRefBS*)bs;
assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code");
Label done;
Label runtime;
@@ -1770,10 +1777,33 @@
__ pop(rcx);
__ pop(rax);
}
break;
+ case shenandoah_lrb_slow_id:
+ {
+ StubFrame f(sasm, "shenandoah_load_reference_barrier", dont_gc_arguments);
+ // arg0 : object to be resolved
+
+ save_live_registers(sasm, 1);
+#ifdef _LP64
+ f.load_argument(0, c_rarg0);
+ f.load_argument(1, c_rarg1);
+ if (UseCompressedOops) {
+ __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_narrow), c_rarg0, c_rarg1);
+ } else {
+ __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier), c_rarg0, c_rarg1);
+ }
+#else
+ f.load_argument(0, rax);
+ f.load_argument(1, rbx);
+ __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier), rax, rbx);
+#endif
+ restore_live_registers_except_rax(sasm, true);
+
+ }
+ break;
#endif // INCLUDE_ALL_GCS
case predicate_failed_trap_id:
{
StubFrame f(sasm, "predicate_failed_trap", dont_gc_arguments);
< prev index next >