< prev index next >

src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp

Print this page




 438   } else {
 439     __ add(var_size_in_bytes, var_size_in_bytes, BrooksPointer::byte_size());
 440     __ lea(end, Address(obj, var_size_in_bytes));
 441   }
 442   __ ldr(rscratch1, Address(rthread, JavaThread::tlab_end_offset()));
 443   __ cmp(end, rscratch1);
 444   __ br(Assembler::HI, slow_case);
 445 
 446   // update the tlab top pointer
 447   __ str(end, Address(rthread, JavaThread::tlab_top_offset()));
 448 
 449   __ add(obj, obj, BrooksPointer::byte_size());
 450   __ str(obj, Address(obj, BrooksPointer::byte_offset()));
 451 
 452   // recover var_size_in_bytes if necessary
 453   if (var_size_in_bytes == end) {
 454     __ sub(var_size_in_bytes, var_size_in_bytes, obj);
 455   }
 456 }
 457 
 458 void ShenandoahBarrierSetAssembler::resolve_for_read(MacroAssembler* masm, DecoratorSet decorators, Register obj) {
 459   bool oop_not_null = (decorators & IS_NOT_NULL) != 0;
 460   if (oop_not_null) {
 461     read_barrier_not_null(masm, obj);
 462   } else {
 463     read_barrier(masm, obj);
 464   }
 465 }
 466 
 467 void ShenandoahBarrierSetAssembler::resolve_for_write(MacroAssembler* masm, DecoratorSet decorators, Register obj) {
 468   bool oop_not_null = (decorators & IS_NOT_NULL) != 0;
 469   if (oop_not_null) {
 470     write_barrier(masm, obj);
 471   } else {
 472     Label is_null;
 473     __ cbz(obj, is_null);
 474     write_barrier(masm, obj);
 475     __ bind(is_null);
 476   }
 477 }
 478 
 479 void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val,
 480                                                 bool acquire, bool release, bool weak, bool encode,
 481                                                 Register tmp1, Register tmp2, Register tmp3,
 482                                                 Register result) {
 483 
 484   if (encode) {
 485     storeval_barrier(masm, new_val, tmp3);
 486   }
 487 
 488   if (UseCompressedOops) {
 489     if (encode) {
 490       __ encode_heap_oop(tmp1, expected);
 491       expected = tmp1;
 492       __ encode_heap_oop(tmp2, new_val);
 493       new_val = tmp2;
 494     }
 495   }
 496   bool is_cae = (result != noreg);
 497   bool is_narrow = UseCompressedOops;
 498   Assembler::operand_size size = is_narrow ? Assembler::word : Assembler::xword;




 438   } else {
 439     __ add(var_size_in_bytes, var_size_in_bytes, BrooksPointer::byte_size());
 440     __ lea(end, Address(obj, var_size_in_bytes));
 441   }
 442   __ ldr(rscratch1, Address(rthread, JavaThread::tlab_end_offset()));
 443   __ cmp(end, rscratch1);
 444   __ br(Assembler::HI, slow_case);
 445 
 446   // update the tlab top pointer
 447   __ str(end, Address(rthread, JavaThread::tlab_top_offset()));
 448 
 449   __ add(obj, obj, BrooksPointer::byte_size());
 450   __ str(obj, Address(obj, BrooksPointer::byte_offset()));
 451 
 452   // recover var_size_in_bytes if necessary
 453   if (var_size_in_bytes == end) {
 454     __ sub(var_size_in_bytes, var_size_in_bytes, obj);
 455   }
 456 }
 457 





















 458 void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val,
 459                                                 bool acquire, bool release, bool weak, bool encode,
 460                                                 Register tmp1, Register tmp2, Register tmp3,
 461                                                 Register result) {
 462 
 463   if (encode) {
 464     storeval_barrier(masm, new_val, tmp3);
 465   }
 466 
 467   if (UseCompressedOops) {
 468     if (encode) {
 469       __ encode_heap_oop(tmp1, expected);
 470       expected = tmp1;
 471       __ encode_heap_oop(tmp2, new_val);
 472       new_val = tmp2;
 473     }
 474   }
 475   bool is_cae = (result != noreg);
 476   bool is_narrow = UseCompressedOops;
 477   Assembler::operand_size size = is_narrow ? Assembler::word : Assembler::xword;


< prev index next >