< prev index next >

src/cpu/x86/vm/templateInterpreter_x86_32.cpp

Print this page

        

*** 744,753 **** --- 744,768 ---- __ jcc(Assembler::notEqual, notChar); __ load_unsigned_short(rax, field_address); __ jmp(xreturn_path); __ bind(notChar); + + #if INCLUDE_ALL_GCS + if (UseShenandoahGC) { + Label notObj; + + // Needs GC barriers + __ cmpl(rdx, atos); + __ jcc(Assembler::notEqual, notObj); + __ load_heap_oop(rax, field_address); + __ jmp(xreturn_path); + + __ bind(notObj); + } + #endif + #ifdef ASSERT Label okay; __ cmpl(rdx, atos); __ jcc(Assembler::equal, okay); __ cmpl(rdx, itos);
*** 812,822 **** 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; // Check if local 0 != NULL // If the receiver is null then it is OK to jump to the slow path. __ movptr(rax, Address(rsp, wordSize)); --- 827,837 ---- 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; // Check if local 0 != NULL // If the receiver is null then it is OK to jump to the slow path. __ movptr(rax, Address(rsp, wordSize));
*** 836,856 **** --- 851,879 ---- // calls the runtime __ push(rsi); // Load the value of the referent field. const Address field_address(rax, referent_offset); + #if INCLUDE_ALL_GCS + if (UseShenandoahGC) { + // Needs GC barriers + __ load_heap_oop(rax, field_address); + } else + #endif __ movptr(rax, field_address); // Generate the G1 pre-barrier code to log the value of // the referent field in an SATB buffer. + if (!UseShenandoahGC || ShenandoahKeepAliveBarrier) { __ get_thread(rcx); __ g1_write_barrier_pre(noreg /* obj */, rax /* pre_val */, rcx /* thread */, rbx /* tmp */, true /* tosca_save */, true /* expand_call */); + } // _areturn __ pop(rsi); // get sender sp __ pop(rdi); // get return address __ mov(rsp, rsi); // set sp to sender sp
< prev index next >