changeset 53160:30a26fc8a8b8 lworld

[lworld] More fixes related to T_VALUETYPE
author fparain
date Tue, 04 Dec 2018 10:05:56 -0500
parents a54562c71d46
children a28bb15329c2
files src/hotspot/cpu/x86/frame_x86.cpp src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp src/hotspot/cpu/x86/sharedRuntime_x86_32.cpp src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp src/hotspot/cpu/x86/stubGenerator_x86_64.cpp src/hotspot/share/classfile/bytecodeAssembler.cpp src/hotspot/share/classfile/classFileParser.cpp src/hotspot/share/gc/shared/c1/barrierSetC1.hpp src/hotspot/share/gc/z/zBarrierSet.cpp src/hotspot/share/interpreter/bytecodeTracer.cpp src/hotspot/share/jvmci/jvmciCompilerToVM.cpp src/hotspot/share/memory/heapShared.cpp src/hotspot/share/oops/methodData.cpp src/hotspot/share/prims/jni.cpp src/hotspot/share/prims/jniCheck.cpp src/hotspot/share/prims/jvm.cpp src/hotspot/share/prims/jvmtiExport.cpp src/hotspot/share/prims/jvmtiImpl.cpp src/hotspot/share/prims/methodHandles.cpp src/hotspot/share/runtime/fieldDescriptor.cpp src/hotspot/share/runtime/javaCalls.cpp src/hotspot/share/runtime/reflection.cpp src/hotspot/share/runtime/signature.hpp src/hotspot/share/runtime/stubRoutines.cpp src/hotspot/share/utilities/globalDefinitions.hpp
diffstat 26 files changed, 54 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/src/hotspot/cpu/x86/frame_x86.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/cpu/x86/frame_x86.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -585,6 +585,7 @@
 
   switch (type) {
     case T_OBJECT  :
+    case T_VALUETYPE:
     case T_ARRAY   : {
       oop obj;
       if (method->is_native()) {
--- a/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -38,6 +38,7 @@
   bool is_not_null = (decorators & IS_NOT_NULL) != 0;
   bool atomic = (decorators & MO_RELAXED) != 0;
 
+  assert(type != T_VALUETYPE, "Not supported yet");
   switch (type) {
   case T_OBJECT:
   case T_ARRAY: {
@@ -103,6 +104,7 @@
   bool is_not_null = (decorators & IS_NOT_NULL) != 0;
   bool atomic = (decorators & MO_RELAXED) != 0;
 
+  assert(type != T_VALUETYPE, "Not supported yet");
   switch (type) {
   case T_OBJECT:
   case T_ARRAY: {
--- a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -193,6 +193,7 @@
                                     Register tmp2) {
   BLOCK_COMMENT("ZBarrierSetAssembler::store_at {");
 
+  assert(type != T_VALUETYPE, "Not supported yet");
   // Verify oop store
   if (type == T_OBJECT || type == T_ARRAY) {
     // Note that src could be noreg, which means we
--- a/src/hotspot/cpu/x86/sharedRuntime_x86_32.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/cpu/x86/sharedRuntime_x86_32.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -463,6 +463,7 @@
     case T_INT:
     case T_ARRAY:
     case T_OBJECT:
+    case T_VALUETYPE:
     case T_ADDRESS:
       if( reg_arg0 == 9999 )  {
         reg_arg0 = i;
@@ -1015,6 +1016,7 @@
     case T_SHORT:
     case T_INT:
     case T_OBJECT:
+    case T_VALUETYPE:
     case T_ARRAY:
     case T_ADDRESS:
     case T_METADATA:
@@ -1296,6 +1298,7 @@
           }
           break;
         case T_OBJECT:
+        case T_VALUETYPE:
         default: ShouldNotReachHere();
       }
     } else if (in_regs[i].first()->is_XMMRegister()) {
@@ -1432,7 +1435,7 @@
   if (VerifyOops) {
     for (int i = 0; i < method->size_of_parameters(); i++) {
       if (sig_bt[i] == T_OBJECT ||
-          sig_bt[i] == T_ARRAY) {
+          sig_bt[i] == T_ARRAY || sig_bt[i] == T_VALUETYPE) {
         VMReg r = regs[i].first();
         assert(r->is_valid(), "bad oop arg");
         if (r->is_stack()) {
@@ -1905,6 +1908,7 @@
           c_arg++;
           break;
         }
+      case T_VALUETYPE:
       case T_OBJECT:
         assert(!is_critical_native, "no oop arguments");
         object_move(masm, map, oop_handle_offset, stack_slots, in_regs[i], out_regs[c_arg],
@@ -2090,6 +2094,7 @@
     // Result is in st0 we'll save as needed
     break;
   case T_ARRAY:                 // Really a handle
+  case T_VALUETYPE:             // Really a handle
   case T_OBJECT:                // Really a handle
       break; // can't de-handlize until after safepoint check
   case T_VOID: break;
@@ -2249,7 +2254,7 @@
   __ reset_last_Java_frame(thread, false);
 
   // Unbox oop result, e.g. JNIHandles::resolve value.
-  if (ret_type == T_OBJECT || ret_type == T_ARRAY) {
+  if (ret_type == T_OBJECT || ret_type == T_ARRAY || ret_type == T_VALUETYPE) {
     __ resolve_jobject(rax /* value */,
                        thread /* thread */,
                        rcx /* tmp */);
--- a/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -570,6 +570,7 @@
       assert(sig_bt[i + 1] == T_VOID, "expecting half");
       // fall through
     case T_OBJECT:
+    case T_VALUETYPE:
     case T_ARRAY:
     case T_ADDRESS:
     case T_METADATA:
@@ -1334,6 +1335,7 @@
         // fall through
       case T_OBJECT:
       case T_ARRAY:
+      case T_VALUETYPE:
       case T_ADDRESS:
       case T_METADATA:
         if (int_args < Argument::n_int_register_parameters_c) {
@@ -1718,6 +1720,7 @@
           // handled above
           break;
         case T_OBJECT:
+        case T_VALUETYPE:
         default: ShouldNotReachHere();
       }
     } else if (in_regs[i].first()->is_XMMRegister()) {
@@ -2093,7 +2096,8 @@
   if (VerifyOops) {
     for (int i = 0; i < method->size_of_parameters(); i++) {
       if (sig_bt[i] == T_OBJECT ||
-          sig_bt[i] == T_ARRAY) {
+          sig_bt[i] == T_ARRAY ||
+          sig_bt[i] == T_VALUETYPE) {
         VMReg r = regs[i].first();
         assert(r->is_valid(), "bad oop arg");
         if (r->is_stack()) {
@@ -2630,6 +2634,7 @@
 #endif
           break;
         }
+      case T_VALUETYPE:
       case T_OBJECT:
         assert(!is_critical_native, "no oop arguments");
         object_move(masm, map, oop_handle_offset, stack_slots, in_regs[i], out_regs[c_arg],
@@ -2833,6 +2838,7 @@
     // Result is in xmm0 we'll save as needed
     break;
   case T_ARRAY:                 // Really a handle
+  case T_VALUETYPE:             // Really a handle
   case T_OBJECT:                // Really a handle
       break; // can't de-handlize until after safepoint check
   case T_VOID: break;
@@ -2998,7 +3004,7 @@
   __ reset_last_Java_frame(false);
 
   // Unbox oop result, e.g. JNIHandles::resolve value.
-  if (ret_type == T_OBJECT || ret_type == T_ARRAY) {
+  if (ret_type == T_OBJECT || ret_type == T_ARRAY || ret_type == T_VALUETYPE) {
     __ resolve_jobject(rax /* value */,
                        r15_thread /* thread */,
                        rcx /* tmp */);
--- a/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -337,12 +337,14 @@
     return_address = __ pc();
 
     // store result depending on type (everything that is not
-    // T_OBJECT, T_LONG, T_FLOAT or T_DOUBLE is treated as T_INT)
+    // T_OBJECT, T_VALUETYPE, T_LONG, T_FLOAT or T_DOUBLE is treated as T_INT)
     __ movptr(c_rarg0, result);
     Label is_long, is_float, is_double, exit;
     __ movl(c_rarg1, result_type);
     __ cmpl(c_rarg1, T_OBJECT);
     __ jcc(Assembler::equal, is_long);
+    __ cmpl(c_rarg1, T_VALUETYPE);
+    __ jcc(Assembler::equal, is_long);
     __ cmpl(c_rarg1, T_LONG);
     __ jcc(Assembler::equal, is_long);
     __ cmpl(c_rarg1, T_FLOAT);
--- a/src/hotspot/share/classfile/bytecodeAssembler.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/classfile/bytecodeAssembler.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -188,6 +188,7 @@
     case T_DOUBLE:  dload(index); break;
     case T_LONG:    lload(index); break;
     case T_OBJECT:
+    case T_VALUETYPE:
     case T_ARRAY:   aload(index); break;
     default:
       ShouldNotReachHere();
@@ -255,6 +256,7 @@
     case T_DOUBLE:  dreturn(); break;
     case T_LONG:    lreturn(); break;
     case T_OBJECT:
+    case T_VALUETYPE:
     case T_ARRAY:   areturn(); break;
     case T_VOID:    _return(); break;
     default:
--- a/src/hotspot/share/classfile/classFileParser.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/classfile/classFileParser.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -1638,6 +1638,7 @@
     verify_legal_field_signature(name, sig, CHECK);
     assert(!access_flags.is_flattenable(), "ACC_FLATTENABLE should have been filtered out");
     if (sig->is_Q_signature()) {
+      // assert(_major_version >= CONSTANT_CLASS_DESCRIPTORS, "Q-descriptors are only supported in recent classfiles");
       access_flags.set_is_flattenable();
     }
     if (access_flags.is_flattenable()) {
--- a/src/hotspot/share/gc/shared/c1/barrierSetC1.hpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/gc/shared/c1/barrierSetC1.hpp	Tue Dec 04 10:05:56 2018 -0500
@@ -100,7 +100,7 @@
   BasicType type() const               { return _type; }
   LIR_Opr resolved_addr() const        { return _resolved_addr; }
   void set_resolved_addr(LIR_Opr addr) { _resolved_addr = addr; }
-  bool is_oop() const                  { return _type == T_ARRAY || _type == T_OBJECT; }
+  bool is_oop() const                  { return _type == T_ARRAY || _type == T_OBJECT || _type == T_VALUETYPE; }
   DecoratorSet decorators() const      { return _decorators; }
   bool is_raw() const                  { return (_decorators & AS_RAW) != 0; }
 };
--- a/src/hotspot/share/gc/z/zBarrierSet.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/gc/z/zBarrierSet.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -55,6 +55,7 @@
   assert((decorators & AS_NO_KEEPALIVE) == 0, "Unexpected decorator");
   //assert((decorators & ON_UNKNOWN_OOP_REF) == 0, "Unexpected decorator");
 
+  assert(type != T_VALUETYPE, "Not supported yet");
   if (type == T_OBJECT || type == T_ARRAY) {
     assert((decorators & (IN_HEAP | IN_NATIVE)) != 0, "Where is reference?");
     // Barrier needed even when IN_NATIVE, to allow concurrent scanning.
--- a/src/hotspot/share/interpreter/bytecodeTracer.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/interpreter/bytecodeTracer.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -452,7 +452,7 @@
     case Bytecodes::_newarray: {
         BasicType atype = (BasicType)get_index_u1();
         const char* str = type2name(atype);
-        if (str == NULL || atype == T_OBJECT || atype == T_ARRAY) {
+        if (str == NULL || atype == T_OBJECT || atype == T_ARRAY || atype == T_VALUETYPE) {
           assert(false, "Unidentified basic type");
         }
         st->print_cr(" %s", str);
--- a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -863,7 +863,8 @@
 
   if (jap.get_ret_type() == T_VOID) {
     return NULL;
-  } else if (jap.get_ret_type() == T_OBJECT || jap.get_ret_type() == T_ARRAY) {
+  } else if (jap.get_ret_type() == T_OBJECT || jap.get_ret_type() == T_ARRAY
+             || jap.get_ret_type() == T_VALUETYPE) {
     return JNIHandles::make_local(THREAD, (oop) result.get_jobject());
   } else {
     jvalue *value = (jvalue *) result.get_value_addr();
--- a/src/hotspot/share/memory/heapShared.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/memory/heapShared.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -482,6 +482,7 @@
     return;
   }
 
+  assert(field_type != T_VALUETYPE, "Not supported yet");
   if (field_type == T_OBJECT || field_type == T_ARRAY) {
     // obtain k's subGraph Info
     KlassSubGraphInfo* subgraph_info = get_subgraph_info(k);
--- a/src/hotspot/share/oops/methodData.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/oops/methodData.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -216,7 +216,8 @@
     args_cell = TypeStackSlotEntries::compute_cell_count(inv.signature(), false, TypeProfileArgsLimit);
   }
   int ret_cell = 0;
-  if (MethodData::profile_return_for_invoke(m, bci) && (inv.result_type() == T_OBJECT || inv.result_type() == T_ARRAY)) {
+  if (MethodData::profile_return_for_invoke(m, bci)
+      && (inv.result_type() == T_OBJECT || inv.result_type() == T_ARRAY || inv.result_type() == T_VALUETYPE)) {
     ret_cell = ReturnTypeEntry::static_cell_count();
   }
   int header_cell = 0;
@@ -295,7 +296,8 @@
   }
 
   if (has_return()) {
-    assert(inv.result_type() == T_OBJECT || inv.result_type() == T_ARRAY, "room for a ret type but doesn't return obj?");
+    assert(inv.result_type() == T_OBJECT || inv.result_type() == T_ARRAY || inv.result_type() == T_VALUETYPE,
+           "room for a ret type but doesn't return obj?");
     _ret.post_initialize();
   }
 }
@@ -316,7 +318,8 @@
   }
 
   if (has_return()) {
-    assert(inv.result_type() == T_OBJECT || inv.result_type() == T_ARRAY, "room for a ret type but doesn't return obj?");
+    assert(inv.result_type() == T_OBJECT || inv.result_type() == T_ARRAY || inv.result_type() == T_VALUETYPE,
+           "room for a ret type but doesn't return obj?");
     _ret.post_initialize();
   }
 }
--- a/src/hotspot/share/prims/jni.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/prims/jni.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -1128,7 +1128,7 @@
   JavaCalls::call(result, method, &java_args, CHECK);
 
   // Convert result
-  if (result->get_type() == T_OBJECT || result->get_type() == T_ARRAY) {
+  if (result->get_type() == T_OBJECT || result->get_type() == T_ARRAY || result->get_type() == T_VALUETYPE) {
     result->set_jobject(JNIHandles::make_local(env, (oop) result->get_jobject()));
   }
 }
@@ -1191,7 +1191,7 @@
   JavaCalls::call(result, method, &java_args, CHECK);
 
   // Convert result
-  if (result->get_type() == T_OBJECT || result->get_type() == T_ARRAY) {
+  if (result->get_type() == T_OBJECT || result->get_type() == T_ARRAY || result->get_type() == T_VALUETYPE) {
     result->set_jobject(JNIHandles::make_local(env, (oop) result->get_jobject()));
   }
 }
--- a/src/hotspot/share/prims/jniCheck.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/prims/jniCheck.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -273,7 +273,8 @@
   if (!id->find_local_field(&fd))
     ReportJNIFatalError(thr, fatal_static_field_not_found);
   if ((fd.field_type() != ftype) &&
-      !(fd.field_type() == T_ARRAY && ftype == T_OBJECT)) {
+      !(fd.field_type() == T_ARRAY && ftype == T_OBJECT) &&
+      !(fd.field_type() == T_VALUETYPE && ftype == T_OBJECT)) {
     ReportJNIFatalError(thr, fatal_static_field_mismatch);
   }
 }
@@ -310,7 +311,8 @@
     ReportJNIFatalError(thr, fatal_instance_field_not_found);
 
   if ((fd.field_type() != ftype) &&
-      !(fd.field_type() == T_ARRAY && ftype == T_OBJECT)) {
+      !(fd.field_type() == T_ARRAY && ftype == T_OBJECT) &&
+      !(fd.field_type() == T_VALUETYPE && ftype == T_OBJECT)) {
     ReportJNIFatalError(thr, fatal_instance_field_mismatch);
   }
 }
--- a/src/hotspot/share/prims/jvm.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/prims/jvm.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -741,7 +741,7 @@
   JVMWrapper("JVM_FindPrimitiveClass");
   oop mirror = NULL;
   BasicType t = name2type(utf);
-  if (t != T_ILLEGAL && t != T_OBJECT && t != T_ARRAY) {
+  if (t != T_ILLEGAL && t != T_OBJECT && t != T_ARRAY && t != T_VALUETYPE) {
     mirror = Universe::java_mirror(t);
   }
   if (mirror == NULL) {
--- a/src/hotspot/share/prims/jvmtiExport.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/prims/jvmtiExport.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -1558,7 +1558,7 @@
     if (!exception_exit) {
       oop oop_result;
       BasicType type = current_frame.interpreter_frame_result(&oop_result, &value);
-      if (type == T_OBJECT || type == T_ARRAY) {
+      if (type == T_OBJECT || type == T_ARRAY || type == T_VALUETYPE) {
         result = Handle(thread, oop_result);
       }
     }
--- a/src/hotspot/share/prims/jvmtiImpl.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/prims/jvmtiImpl.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -682,6 +682,7 @@
     slot_type = T_INT;
     break;
   case T_ARRAY:
+  case T_VALUETYPE:
     slot_type = T_OBJECT;
     break;
   default:
--- a/src/hotspot/share/prims/methodHandles.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/prims/methodHandles.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -574,7 +574,7 @@
     if (is_subword_type(bt)) {
       bsig = vmSymbols::int_signature();
     } else {
-      assert(bt == T_OBJECT || bt == T_ARRAY, "is_basic_type_signature was false");
+      assert(bt == T_OBJECT || bt == T_ARRAY || bt == T_VALUETYPE, "is_basic_type_signature was false");
       bsig = vmSymbols::object_signature();
     }
   } else {
--- a/src/hotspot/share/runtime/fieldDescriptor.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/runtime/fieldDescriptor.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -237,7 +237,7 @@
   // Print a hint as to the underlying integer representation. This can be wrong for
   // pointers on an LP64 machine
 #ifdef _LP64
-  if ((ft == T_OBJECT || ft == T_ARRAY) && UseCompressedOops) {
+  if ((ft == T_OBJECT || ft == T_ARRAY || ft == T_VALUETYPE) && UseCompressedOops) {
     st->print(" (%x)", obj->int_field(offset()));
   }
   else // <- intended
--- a/src/hotspot/share/runtime/javaCalls.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/runtime/javaCalls.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -399,7 +399,8 @@
   // Figure out if the result value is an oop or not (Note: This is a different value
   // than result_type. result_type will be T_INT of oops. (it is about size)
   BasicType result_type = runtime_type_from(result);
-  bool oop_result_flag = (result->get_type() == T_OBJECT || result->get_type() == T_ARRAY);
+  bool oop_result_flag = (result->get_type() == T_OBJECT || result->get_type() == T_ARRAY
+                          || result->get_type() == T_VALUETYPE);
 
   // NOTE: if we move the computation of the result_val_address inside
   // the call to call_stub, the optimizer produces wrong code.
--- a/src/hotspot/share/runtime/reflection.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/runtime/reflection.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -93,7 +93,7 @@
   if (type == T_VOID) {
     return NULL;
   }
-  if (type == T_OBJECT || type == T_ARRAY) {
+  if (type == T_OBJECT || type == T_ARRAY || type == T_VALUETYPE) {
     // regular objects are not boxed
     return (oop) value->l;
   }
--- a/src/hotspot/share/runtime/signature.hpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/runtime/signature.hpp	Tue Dec 04 10:05:56 2018 -0500
@@ -143,7 +143,7 @@
   void do_long()                       { type_name("jlong"   ); }
   void do_void()                       { type_name("void"    ); }
   void do_object(int begin, int end)   { type_name("jobject" ); }
-  void do_valuetype(int begin, int end) { type_name("jvaluetype"); }
+  void do_valuetype(int begin, int end) { type_name("jobject"); }
   void do_array (int begin, int end)   { type_name("jobject" ); }
 
  public:
--- a/src/hotspot/share/runtime/stubRoutines.cpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/runtime/stubRoutines.cpp	Tue Dec 04 10:05:56 2018 -0500
@@ -490,6 +490,7 @@
   case T_DOUBLE:
   case T_LONG:
   case T_ARRAY:
+  case T_VALUETYPE:
   case T_OBJECT:
   case T_NARROWOOP:
   case T_NARROWKLASS:
--- a/src/hotspot/share/utilities/globalDefinitions.hpp	Tue Dec 04 14:35:54 2018 +0100
+++ b/src/hotspot/share/utilities/globalDefinitions.hpp	Tue Dec 04 10:05:56 2018 -0500
@@ -613,7 +613,7 @@
 }
 
 inline bool is_reference_type(BasicType t) {
-  return (t == T_OBJECT || t == T_ARRAY);
+  return (t == T_OBJECT || t == T_ARRAY || t == T_VALUETYPE);
 }
 
 // Convert a char from a classfile signature to a BasicType
@@ -720,7 +720,6 @@
     jint     i;
     jlong    l;
     jobject  h;
-    jvaluetype q;
   } JavaCallValue;
 
  private: