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