< prev index next >
src/cpu/x86/vm/templateTable_x86.cpp
Print this page
rev 13055 : Implement barriers for maintaining connection matrix.
@@ -180,25 +180,35 @@
val != noreg /* tosca_live */,
false /* expand_call */);
if (val == noreg) {
__ store_heap_oop_null(Address(rdx, 0));
} else {
+ // For Shenandoah, make sure we only store refs into to-space.
+ oopDesc::bs()->interpreter_read_barrier(_masm, val);
+
// G1 barrier needs uncompressed oop for region cross check.
Register new_val = val;
if (UseCompressedOops) {
new_val = rbx;
__ movptr(new_val, val);
}
- // For Shenandoah, make sure we only store refs into to-space.
- oopDesc::bs()->interpreter_read_barrier(_masm, val);
__ store_heap_oop(Address(rdx, 0), val);
+ if (UseG1GC) {
__ g1_write_barrier_post(rdx /* store_adr */,
new_val /* new_val */,
rthread /* thread */,
rtmp /* tmp */,
rbx /* tmp2 */);
+ } else {
+ assert(UseShenandoahGC, "sanity");
+ __ shenandoah_write_barrier_post(rdx /* store_adr */,
+ new_val /* new_val */,
+ rthread /* thread */,
+ rtmp /* tmp */,
+ rbx /* tmp2 */);
+ }
}
NOT_LP64( __ restore_bcp());
}
break;
#endif // INCLUDE_ALL_GCS
< prev index next >