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.
|