--- a/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.cpp Wed May 16 11:11:03 2018 -0400
+++ b/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.cpp Thu May 17 14:19:54 2018 +0200
@@ -36,9 +36,10 @@
}
void BarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
- const Address& addr, Register dst, Register tmp1, Register tmp2, Label *is_null) {
- bool on_heap = (decorators & IN_HEAP) != 0;
- bool on_root = (decorators & IN_ROOT) != 0;
+ const Address& addr, Register dst, Register tmp1, Register tmp2, Label *L_handle_null) {
+ bool on_heap = (decorators & IN_HEAP) != 0;
+ bool on_root = (decorators & IN_ROOT) != 0;
+ bool not_null = (decorators & OOP_NOT_NULL) != 0;
assert(on_heap || on_root, "where?");
switch (type) {
@@ -46,16 +47,16 @@
case T_OBJECT: {
if (UseCompressedOops && on_heap) {
__ z_llgf(dst, addr);
- if (is_null) {
- __ compareU32_and_branch(dst, (intptr_t)0, Assembler::bcondEqual, *is_null);
+ if (L_handle_null != NULL) { // Label provided.
+ __ compareU32_and_branch(dst, (intptr_t)0, Assembler::bcondEqual, *L_handle_null);
__ oop_decoder(dst, dst, false);
} else {
- __ oop_decoder(dst, dst, true);
+ __ oop_decoder(dst, dst, !not_null);
}
} else {
__ z_lg(dst, addr);
- if (is_null) {
- __ compareU64_and_branch(dst, (intptr_t)0, Assembler::bcondEqual, *is_null);
+ if (L_handle_null != NULL) {
+ __ compareU64_and_branch(dst, (intptr_t)0, Assembler::bcondEqual, *L_handle_null);
}
}
break;