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 |