src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.cpp
changeset 50162 f9fe56417050
parent 49844 fa6f8bce6490
child 50599 ecc2af326b5f
--- 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;