< prev index next >

src/hotspot/share/interpreter/abstractInterpreter.cpp

Print this page
*** 151,11 ***
--- 151,17 ---
        case vmIntrinsics::_Reference_get0:    return java_lang_ref_reference_get0;
        case vmIntrinsics::_Object_init:
          if (m->code_size() == 1) {
            // We need to execute the special return bytecode to check for
            // finalizer registration so create a normal frame.
+           // No need to use the method kind with a memory barrier on entry
+           // because the method is empty and already has a memory barrier on return
            return zerolocals;
+         } else if (EnableValhalla) {
+           // For non-empty Object constructors, we need a memory barrier
+           // when entering the method to ensure correctness of strict fields
+           return object_init;
          }
          break;
        default: break;
      }
    }

*** 300,10 ***
--- 306,11 ---
      case native_synchronized    : tty->print("native_synchronized"    ); break;
      case empty                  : tty->print("empty"                  ); break;
      case getter                 : tty->print("getter"                 ); break;
      case setter                 : tty->print("setter"                 ); break;
      case abstract               : tty->print("abstract"               ); break;
+     case object_init            : tty->print("object_init"            ); break;
      case java_lang_math_sin     : tty->print("java_lang_math_sin"     ); break;
      case java_lang_math_cos     : tty->print("java_lang_math_cos"     ); break;
      case java_lang_math_tan     : tty->print("java_lang_math_tan"     ); break;
      case java_lang_math_sinh    : tty->print("java_lang_math_sinh"    ); break;
      case java_lang_math_tanh    : tty->print("java_lang_math_tanh"    ); break;
< prev index next >