< prev index next >

src/cpu/x86/vm/templateInterpreter_x86_64.cpp

Print this page

        

*** 788,798 **** address entry = __ pc(); const int referent_offset = java_lang_ref_Reference::referent_offset; guarantee(referent_offset > 0, "referent offset not initialized"); ! if (UseG1GC) { Label slow_path; // rbx: method // Check if local 0 != NULL // If the receiver is null then it is OK to jump to the slow path. --- 788,798 ---- address entry = __ pc(); const int referent_offset = java_lang_ref_Reference::referent_offset; guarantee(referent_offset > 0, "referent offset not initialized"); ! if (UseG1GC || UseShenandoahGC) { Label slow_path; // rbx: method // Check if local 0 != NULL // If the receiver is null then it is OK to jump to the slow path.
*** 813,828 **** --- 813,832 ---- const Address field_address(rax, referent_offset); __ load_heap_oop(rax, field_address); // Generate the G1 pre-barrier code to log the value of // the referent field in an SATB buffer. + if (!UseShenandoahGC || ShenandoahKeepAliveBarrier) { + if (UseShenandoahGC) __ push_IU_state(); __ g1_write_barrier_pre(noreg /* obj */, rax /* pre_val */, r15_thread /* thread */, rbx /* tmp */, true /* tosca_live */, true /* expand_call */); + if (UseShenandoahGC) __ pop_IU_state(); + } // _areturn __ pop(rdi); // get return address __ mov(rsp, r13); // set sp to sender sp __ jmp(rdi);
< prev index next >