< prev index next >

src/cpu/x86/vm/macroAssembler_x86.cpp

Print this page
rev 8961 : [mq]: diff-shenandoah.patch

*** 3727,3736 **** --- 3727,3741 ---- void MacroAssembler::null_check(Register reg, int offset) { if (needs_explicit_null_check(offset)) { // provoke OS NULL exception if reg = NULL by // accessing M[reg] w/o changing any (non-CC) registers // NOTE: cmpl is plenty here to provoke a segv + + if (ShenandoahVerifyReadsToFromSpace) { + oopDesc::bs()->interpreter_read_barrier(this, reg); + } + cmpptr(rax, Address(reg, 0)); // Note: should probably use testl(rax, Address(reg, 0)); // may be shorter code (however, this version of // testl needs to be implemented first) } else {
*** 4225,4234 **** --- 4230,4246 ---- Register tmp2) { #ifdef _LP64 assert(thread == r15_thread, "must be"); #endif // _LP64 + if (UseShenandoahGC) { + // No need for this in Shenandoah. + return; + } + + assert(UseG1GC, "expect G1 GC"); + Address queue_index(thread, in_bytes(JavaThread::dirty_card_queue_offset() + PtrQueue::byte_offset_of_index())); Address buffer(thread, in_bytes(JavaThread::dirty_card_queue_offset() + PtrQueue::byte_offset_of_buf()));
*** 4409,4430 **** verify_tlab(); NOT_LP64(get_thread(thread)); movptr(obj, Address(thread, JavaThread::tlab_top_offset())); if (var_size_in_bytes == noreg) { ! lea(end, Address(obj, con_size_in_bytes)); } else { lea(end, Address(obj, var_size_in_bytes, Address::times_1)); } cmpptr(end, Address(thread, JavaThread::tlab_end_offset())); jcc(Assembler::above, slow_case); // update the tlab top pointer movptr(Address(thread, JavaThread::tlab_top_offset()), end); // recover var_size_in_bytes if necessary if (var_size_in_bytes == end) { subptr(var_size_in_bytes, obj); } verify_tlab(); --- 4421,4449 ---- verify_tlab(); NOT_LP64(get_thread(thread)); + uint oop_extra_words = Universe::heap()->oop_extra_words(); + movptr(obj, Address(thread, JavaThread::tlab_top_offset())); if (var_size_in_bytes == noreg) { ! lea(end, Address(obj, con_size_in_bytes + oop_extra_words * HeapWordSize)); } else { + if (oop_extra_words > 0) { + addq(var_size_in_bytes, oop_extra_words * HeapWordSize); + } lea(end, Address(obj, var_size_in_bytes, Address::times_1)); } cmpptr(end, Address(thread, JavaThread::tlab_end_offset())); jcc(Assembler::above, slow_case); // update the tlab top pointer movptr(Address(thread, JavaThread::tlab_top_offset()), end); + Universe::heap()->compile_prepare_oop(this, obj); + // recover var_size_in_bytes if necessary if (var_size_in_bytes == end) { subptr(var_size_in_bytes, obj); } verify_tlab();
*** 5688,5697 **** --- 5707,5719 ---- #endif // _LP64 } void MacroAssembler::load_klass(Register dst, Register src) { + if (ShenandoahVerifyReadsToFromSpace) { + oopDesc::bs()->interpreter_read_barrier(this, src); + } #ifdef _LP64 if (UseCompressedClassPointers) { movl(dst, Address(src, oopDesc::klass_offset_in_bytes())); decode_klass_not_null(dst); } else
< prev index next >