< prev index next >

src/hotspot/cpu/x86/shenandoahBarrierSet_x86.cpp

Print this page
rev 47365 : Make OOM-during-evacuation race-free.


  37     interpreter_read_barrier_impl(masm, dst);
  38   }
  39 }
  40 
  41 void ShenandoahBarrierSet::interpreter_read_barrier_impl(MacroAssembler* masm, Register dst) {
  42   Label is_null;
  43   __ testptr(dst, dst);
  44   __ jcc(Assembler::zero, is_null);
  45   interpreter_read_barrier_not_null_impl(masm, dst);
  46   __ bind(is_null);
  47 }
  48 
  49 void ShenandoahBarrierSet::interpreter_read_barrier_not_null(MacroAssembler* masm, Register dst) {
  50   if (ShenandoahReadBarrier) {
  51     interpreter_read_barrier_not_null_impl(masm, dst);
  52   }
  53 }
  54 
  55 void ShenandoahBarrierSet::interpreter_read_barrier_not_null_impl(MacroAssembler* masm, Register dst) {
  56   __ movptr(dst, Address(dst, BrooksPointer::byte_offset()));



  57 }
  58 
  59 void ShenandoahBarrierSet::interpreter_write_barrier(MacroAssembler* masm, Register dst) {
  60   if (ShenandoahWriteBarrier) {
  61     interpreter_write_barrier_impl(masm, dst);
  62   }
  63 }
  64 
  65 void ShenandoahBarrierSet::interpreter_write_barrier_impl(MacroAssembler* masm, Register dst) {
  66 
  67 #ifdef _LP64
  68   assert(dst != rscratch1, "different regs");
  69 
  70   Label done;
  71 
  72   Address evacuation_in_progress = Address(r15_thread, in_bytes(JavaThread::evacuation_in_progress_offset()));
  73 
  74   __ cmpb(evacuation_in_progress, 0);
  75 
  76   // Now check if evacuation is in progress.




  37     interpreter_read_barrier_impl(masm, dst);
  38   }
  39 }
  40 
  41 void ShenandoahBarrierSet::interpreter_read_barrier_impl(MacroAssembler* masm, Register dst) {
  42   Label is_null;
  43   __ testptr(dst, dst);
  44   __ jcc(Assembler::zero, is_null);
  45   interpreter_read_barrier_not_null_impl(masm, dst);
  46   __ bind(is_null);
  47 }
  48 
  49 void ShenandoahBarrierSet::interpreter_read_barrier_not_null(MacroAssembler* masm, Register dst) {
  50   if (ShenandoahReadBarrier) {
  51     interpreter_read_barrier_not_null_impl(masm, dst);
  52   }
  53 }
  54 
  55 void ShenandoahBarrierSet::interpreter_read_barrier_not_null_impl(MacroAssembler* masm, Register dst) {
  56   __ movptr(dst, Address(dst, BrooksPointer::byte_offset()));
  57   if (ShenandoahSafeOOMDuringEvac) {
  58     __ andptr(dst, ~BrooksPointer::EVAC_BLOCKER_BITMASK);
  59   }
  60 }
  61 
  62 void ShenandoahBarrierSet::interpreter_write_barrier(MacroAssembler* masm, Register dst) {
  63   if (ShenandoahWriteBarrier) {
  64     interpreter_write_barrier_impl(masm, dst);
  65   }
  66 }
  67 
  68 void ShenandoahBarrierSet::interpreter_write_barrier_impl(MacroAssembler* masm, Register dst) {
  69 
  70 #ifdef _LP64
  71   assert(dst != rscratch1, "different regs");
  72 
  73   Label done;
  74 
  75   Address evacuation_in_progress = Address(r15_thread, in_bytes(JavaThread::evacuation_in_progress_offset()));
  76 
  77   __ cmpb(evacuation_in_progress, 0);
  78 
  79   // Now check if evacuation is in progress.


< prev index next >