< prev index next >
src/hotspot/cpu/aarch64/gc/shared/barrierSetAssembler_aarch64.cpp
Print this page
@@ -74,26 +74,39 @@
void BarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
Address dst, Register val, Register tmp1, Register tmp2, Register tmp3) {
bool in_heap = (decorators & IN_HEAP) != 0;
bool in_native = (decorators & IN_NATIVE) != 0;
+ bool is_not_null = (decorators & IS_NOT_NULL) != 0;
+
switch (type) {
case T_OBJECT:
case T_ARRAY: {
- val = val == noreg ? zr : val;
if (in_heap) {
+ if (val == noreg) {
+ assert(!is_not_null, "inconsistent access");
+ if (UseCompressedOops) {
+ __ strw(zr, dst);
+ } else {
+ __ str(zr, dst);
+ }
+ } else {
if (UseCompressedOops) {
assert(!dst.uses(val), "not enough registers");
- if (val != zr) {
+ if (is_not_null) {
+ __ encode_heap_oop_not_null(val);
+ } else {
__ encode_heap_oop(val);
}
__ strw(val, dst);
} else {
__ str(val, dst);
}
+ }
} else {
assert(in_native, "why else?");
+ assert(val != noreg, "not supported");
__ str(val, dst);
}
break;
}
case T_BOOLEAN:
@@ -229,11 +242,11 @@
}
__ str(t1, Address(rthread, in_bytes(JavaThread::allocated_bytes_offset())));
}
void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm) {
-// DMS CHECK: 8210498: nmethod entry barriers is not implemented
+// FIXME: 8210498: nmethod entry barriers is not implemented
#if 0
BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod();
if (bs_nm == NULL) {
return;
}
< prev index next >