< prev index next >
src/cpu/x86/vm/c1_Runtime1_x86.cpp
Print this page
*** 37,46 ****
--- 37,47 ----
#include "runtime/signature.hpp"
#include "runtime/vframeArray.hpp"
#include "utilities/macros.hpp"
#include "vmreg_x86.inline.hpp"
#if INCLUDE_ALL_GCS
+ #include "gc/shenandoah/shenandoahBarrierSet.hpp"
#include "gc/g1/g1SATBCardTableModRefBS.hpp"
#endif
// Implementation of StubAssembler
*** 1655,1671 ****
__ ret(0);
}
break;
#if INCLUDE_ALL_GCS
case g1_pre_barrier_slow_id:
{
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) {
__ movptr(rax, (int)id);
__ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), rax);
__ should_not_reach_here();
break;
}
--- 1656,1683 ----
__ ret(0);
}
break;
#if INCLUDE_ALL_GCS
+ case shenandoah_write_barrier_slow_id:
+ {
+ StubFrame f(sasm, "shenandoah_write_barrier", dont_gc_arguments);
+
+ save_live_registers(sasm, 1);
+ __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahBarrierSet::resolve_and_maybe_copy_oop_c1), r15_thread, rax);
+ restore_live_registers_except_rax(sasm);
+ __ verify_oop(rax);
+
+ }
+ break;
case g1_pre_barrier_slow_id:
{
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 && 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;
}
*** 1739,1750 ****
// arg0: store_address
Address store_addr(rbp, 2*BytesPerWord);
CardTableModRefBS* ct =
! barrier_set_cast<CardTableModRefBS>(Universe::heap()->barrier_set());
assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code");
Label done;
Label enqueued;
Label runtime;
--- 1751,1769 ----
// 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 =
! barrier_set_cast<CardTableModRefBS>(bs);
assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code");
Label done;
Label enqueued;
Label runtime;
< prev index next >