< prev index next >

src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp

Print this page
rev 51408 : [mq]: cleanup-c1.patch


 621 #endif
 622   __ movptr(Address(obj, BrooksPointer::byte_offset()), obj);
 623 
 624   // recover var_size_in_bytes if necessary
 625   if (var_size_in_bytes == end) {
 626     __ subptr(var_size_in_bytes, obj);
 627   }
 628   __ verify_tlab();
 629 }
 630 
 631 void ShenandoahBarrierSetAssembler::resolve_for_read(MacroAssembler* masm, DecoratorSet decorators, Register obj) {
 632   bool oop_not_null = (decorators & IS_NOT_NULL) != 0;
 633   if (oop_not_null) {
 634     read_barrier_not_null(masm, obj);
 635   } else {
 636     read_barrier(masm, obj);
 637   }
 638 }
 639 
 640 void ShenandoahBarrierSetAssembler::resolve_for_write(MacroAssembler* masm, DecoratorSet decorators, Register obj) {


 641   write_barrier(masm, obj);







 642 }
 643 
 644 // Special Shenandoah CAS implementation that handles false negatives
 645 // due to concurrent evacuation.
 646 #ifndef _LP64
 647 void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm, DecoratorSet decorators,
 648                                                 Register res, Address addr, Register oldval, Register newval,
 649                                                 bool exchange, bool encode, Register tmp1, Register tmp2) {
 650   // Shenandoah has no 32-bit version for this.
 651   Unimplemented();
 652 }
 653 #else
 654 void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm, DecoratorSet decorators,
 655                                                 Register res, Address addr, Register oldval, Register newval,
 656                                                 bool exchange, bool encode, Register tmp1, Register tmp2) {
 657 
 658   if (!ShenandoahCASBarrier) {
 659     BarrierSetAssembler::cmpxchg_oop(masm, decorators, res, addr, oldval, newval, exchange, encode, tmp1, tmp2);
 660     return;
 661   }




 621 #endif
 622   __ movptr(Address(obj, BrooksPointer::byte_offset()), obj);
 623 
 624   // recover var_size_in_bytes if necessary
 625   if (var_size_in_bytes == end) {
 626     __ subptr(var_size_in_bytes, obj);
 627   }
 628   __ verify_tlab();
 629 }
 630 
 631 void ShenandoahBarrierSetAssembler::resolve_for_read(MacroAssembler* masm, DecoratorSet decorators, Register obj) {
 632   bool oop_not_null = (decorators & IS_NOT_NULL) != 0;
 633   if (oop_not_null) {
 634     read_barrier_not_null(masm, obj);
 635   } else {
 636     read_barrier(masm, obj);
 637   }
 638 }
 639 
 640 void ShenandoahBarrierSetAssembler::resolve_for_write(MacroAssembler* masm, DecoratorSet decorators, Register obj) {
 641   bool oop_not_null = (decorators & IS_NOT_NULL) != 0;
 642   if (oop_not_null) {
 643     write_barrier(masm, obj);
 644   } else {
 645     Label done;
 646     __ testptr(obj, obj);
 647     __ jcc(Assembler::zero, done);
 648     write_barrier(masm, obj);
 649     __ bind(done);
 650   }
 651 }
 652 
 653 // Special Shenandoah CAS implementation that handles false negatives
 654 // due to concurrent evacuation.
 655 #ifndef _LP64
 656 void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm, DecoratorSet decorators,
 657                                                 Register res, Address addr, Register oldval, Register newval,
 658                                                 bool exchange, bool encode, Register tmp1, Register tmp2) {
 659   // Shenandoah has no 32-bit version for this.
 660   Unimplemented();
 661 }
 662 #else
 663 void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm, DecoratorSet decorators,
 664                                                 Register res, Address addr, Register oldval, Register newval,
 665                                                 bool exchange, bool encode, Register tmp1, Register tmp2) {
 666 
 667   if (!ShenandoahCASBarrier) {
 668     BarrierSetAssembler::cmpxchg_oop(masm, decorators, res, addr, oldval, newval, exchange, encode, tmp1, tmp2);
 669     return;
 670   }


< prev index next >