src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp
changeset 57777 90ead0febf56
parent 57716 bfcdcd00e4fb
child 58218 0d7877278adf
equal deleted inserted replaced
57774:21dccfac0ec5 57777:90ead0febf56
   240   }
   240   }
   241 
   241 
   242   Label done;
   242   Label done;
   243   __ ldr(tmp, Address(dst, oopDesc::mark_offset_in_bytes()));
   243   __ ldr(tmp, Address(dst, oopDesc::mark_offset_in_bytes()));
   244   __ eon(tmp, tmp, zr);
   244   __ eon(tmp, tmp, zr);
   245   __ ands(zr, tmp, markOopDesc::lock_mask_in_place);
   245   __ ands(zr, tmp, markWord::lock_mask_in_place);
   246   __ br(Assembler::NE, done);
   246   __ br(Assembler::NE, done);
   247   __ orr(tmp, tmp, markOopDesc::marked_value);
   247   __ orr(tmp, tmp, markWord::marked_value);
   248   __ eon(dst, tmp, zr);
   248   __ eon(dst, tmp, zr);
   249   __ bind(done);
   249   __ bind(done);
   250 
   250 
   251   if (borrow_reg) {
   251   if (borrow_reg) {
   252     __ pop(RegSet::of(tmp), sp);
   252     __ pop(RegSet::of(tmp), sp);
   546 
   546 
   547   // Check if object is already forwarded.
   547   // Check if object is already forwarded.
   548   Label slow_path;
   548   Label slow_path;
   549   __ ldr(tmp1, Address(res, oopDesc::mark_offset_in_bytes()));
   549   __ ldr(tmp1, Address(res, oopDesc::mark_offset_in_bytes()));
   550   __ eon(tmp1, tmp1, zr);
   550   __ eon(tmp1, tmp1, zr);
   551   __ ands(zr, tmp1, markOopDesc::lock_mask_in_place);
   551   __ ands(zr, tmp1, markWord::lock_mask_in_place);
   552   __ br(Assembler::NE, slow_path);
   552   __ br(Assembler::NE, slow_path);
   553 
   553 
   554   // Decode forwarded object.
   554   // Decode forwarded object.
   555   __ orr(tmp1, tmp1, markOopDesc::marked_value);
   555   __ orr(tmp1, tmp1, markWord::marked_value);
   556   __ eon(res, tmp1, zr);
   556   __ eon(res, tmp1, zr);
   557   __ b(*stub->continuation());
   557   __ b(*stub->continuation());
   558 
   558 
   559   __ bind(slow_path);
   559   __ bind(slow_path);
   560   ce->store_parameter(res, 0);
   560   ce->store_parameter(res, 0);
   663   __ bind(work);
   663   __ bind(work);
   664 
   664 
   665   Label slow_path;
   665   Label slow_path;
   666   __ ldr(rscratch1, Address(r0, oopDesc::mark_offset_in_bytes()));
   666   __ ldr(rscratch1, Address(r0, oopDesc::mark_offset_in_bytes()));
   667   __ eon(rscratch1, rscratch1, zr);
   667   __ eon(rscratch1, rscratch1, zr);
   668   __ ands(zr, rscratch1, markOopDesc::lock_mask_in_place);
   668   __ ands(zr, rscratch1, markWord::lock_mask_in_place);
   669   __ br(Assembler::NE, slow_path);
   669   __ br(Assembler::NE, slow_path);
   670 
   670 
   671   // Decode forwarded object.
   671   // Decode forwarded object.
   672   __ orr(rscratch1, rscratch1, markOopDesc::marked_value);
   672   __ orr(rscratch1, rscratch1, markWord::marked_value);
   673   __ eon(r0, rscratch1, zr);
   673   __ eon(r0, rscratch1, zr);
   674   __ ret(lr);
   674   __ ret(lr);
   675 
   675 
   676   __ bind(slow_path);
   676   __ bind(slow_path);
   677   __ enter(); // required for proper stackwalking of RuntimeStub frame
   677   __ enter(); // required for proper stackwalking of RuntimeStub frame