< prev index next >
src/cpu/s390/vm/macroAssembler_s390.cpp
Print this page
rev 12652 : [mq]: kimpatch
*** 3437,3446 ****
--- 3437,3474 ----
load_absolute_address(tmp, (address)bs->byte_map_base);
z_agr(store_addr, tmp);
z_mvi(0, store_addr, 0); // Store byte 0.
}
+ void MacroAssembler::resolve_jobject(Register value, Register tmp1, Register tmp2) {
+ NearLabel Ldone;
+ z_ltgr(tmp1, value);
+ z_bre(Ldone); // Use NULL result as-is.
+
+ z_nill(value, ~JNIHandles::weak_tag_mask);
+ z_lg(value, 0, value); // Resolve (untagged) jobject.
+
+ #if INCLUDE_ALL_GCS
+ if (UseG1GC) {
+ NearLabel Lnot_weak;
+ z_tmll(tmp1, JNIHandles::weak_tag_mask); // Test for jweak tag.
+ z_braz(Lnot_weak);
+ verify_oop(value);
+ g1_write_barrier_pre(noreg /* obj */,
+ noreg /* offset */,
+ value /* pre_val */,
+ noreg /* val */,
+ tmp1 /* tmp1 */,
+ tmp2 /* tmp2 */,
+ true /* pre_val_needed */);
+ bind(Lnot_weak);
+ }
+ #endif // INCLUDE_ALL_GCS
+ verify_oop(value);
+ bind(Ldone);
+ }
+
#if INCLUDE_ALL_GCS
//------------------------------------------------------
// General G1 pre-barrier generator.
// Purpose: record the previous value if it is not null.
< prev index next >