< 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 >