< prev index next >

src/cpu/aarch64/vm/macroAssembler_aarch64.cpp

Print this page

        

*** 3271,3289 **** void MacroAssembler::load_prototype_header(Register dst, Register src) { load_klass(dst, src); ldr(dst, Address(dst, Klass::prototype_header_offset())); } ! void MacroAssembler::store_klass(Register dst, Register src) { ! // FIXME: Should this be a store release? concurrent gcs assumes ! // klass length is valid if klass field is not null. if (UseCompressedClassPointers) { encode_klass_not_null(src); strw(src, Address(dst, oopDesc::klass_offset_in_bytes())); } else { str(src, Address(dst, oopDesc::klass_offset_in_bytes())); } } void MacroAssembler::store_klass_gap(Register dst, Register src) { if (UseCompressedClassPointers) { // Store to klass gap in destination --- 3271,3300 ---- void MacroAssembler::load_prototype_header(Register dst, Register src) { load_klass(dst, src); ldr(dst, Address(dst, Klass::prototype_header_offset())); } ! void MacroAssembler::store_klass(Register dst, Register src, Register tmp) { ! // concurrent gcs assumes klass length is valid if klass field is not null. ! bool is_concurrentGC = UseG1GC || UseConcMarkSweepGC; ! ! if (is_concurrentGC) { ! add(tmp, dst, oopDesc::klass_offset_in_bytes()); ! if (UseCompressedClassPointers) { ! encode_klass_not_null(src); ! stlrw(src, tmp); ! } else { ! stlr(src, tmp); ! } ! } else { if (UseCompressedClassPointers) { encode_klass_not_null(src); strw(src, Address(dst, oopDesc::klass_offset_in_bytes())); } else { str(src, Address(dst, oopDesc::klass_offset_in_bytes())); } + } } void MacroAssembler::store_klass_gap(Register dst, Register src) { if (UseCompressedClassPointers) { // Store to klass gap in destination
*** 3905,3915 **** offset); ldr(t1, Address(rscratch1, offset)); } // store klass last. concurrent gcs assumes klass length is valid if // klass field is not null. ! store_klass(top, t1); mov(t1, top); ldr(rscratch1, Address(rthread, in_bytes(JavaThread::tlab_start_offset()))); sub(t1, t1, rscratch1); incr_allocated_bytes(rthread, t1, 0, rscratch1); --- 3916,3926 ---- offset); ldr(t1, Address(rscratch1, offset)); } // store klass last. concurrent gcs assumes klass length is valid if // klass field is not null. ! store_klass(top, t1, rscratch1); mov(t1, top); ldr(rscratch1, Address(rthread, in_bytes(JavaThread::tlab_start_offset()))); sub(t1, t1, rscratch1); incr_allocated_bytes(rthread, t1, 0, rscratch1);
< prev index next >