< prev index next >
src/cpu/x86/vm/templateInterpreter_x86_64.cpp
Print this page
@@ -788,11 +788,11 @@
address entry = __ pc();
const int referent_offset = java_lang_ref_Reference::referent_offset;
guarantee(referent_offset > 0, "referent offset not initialized");
- if (UseG1GC) {
+ 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,16 +813,20 @@
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 || ShenandoahSATBBarrier) {
+ 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 >