< prev index next >

src/cpu/x86/vm/c1_LIRAssembler_x86.cpp

Print this page
rev 12152 : [mq]: verification.patch
rev 12153 : imported patch shared_sb_stub.patch

*** 1412,1447 **** if (op->need_null_check()) { __ testptr(res, res); __ jcc(Assembler::zero, done); } ! // Check for evacuation-in-progress ! Address evacuation_in_progress = Address(r15_thread, in_bytes(JavaThread::evacuation_in_progress_offset())); ! __ cmpb(evacuation_in_progress, 0); ! ! // The read-barrier. ! __ movptr(res, Address(res, BrooksPointer::byte_offset())); ! ! __ jcc(Assembler::equal, done); ! ! // Check for object in collection set. ! __ movptr(tmp1, res); ! __ shrptr(tmp1, ShenandoahHeapRegion::RegionSizeShift); ! __ movptr(tmp2, (intptr_t) ShenandoahHeap::in_cset_fast_test_addr()); ! __ movbool(tmp2, Address(tmp2, tmp1, Address::times_1)); ! __ testb(tmp2, 0x1); ! __ jcc(Assembler::zero, done); ! ! if (res != rax) { ! __ xchgptr(res, rax); // Move obj into rax and save rax into obj. ! } ! ! __ call(RuntimeAddress(Runtime1::entry_for(Runtime1::shenandoah_write_barrier_slow_id))); ! ! if (res != rax) { ! __ xchgptr(rax, res); // Swap back obj with rax. ! } __ bind(done); } --- 1412,1422 ---- if (op->need_null_check()) { __ testptr(res, res); __ jcc(Assembler::zero, done); } ! __ shenandoah_write_barrier(res); __ bind(done); }
< prev index next >