< prev index next >

src/hotspot/share/runtime/javaCalls.cpp

Print this page

        

@@ -30,10 +30,11 @@
 #include "interpreter/interpreter.hpp"
 #include "interpreter/linkResolver.hpp"
 #include "memory/universe.hpp"
 #include "oops/method.inline.hpp"
 #include "oops/oop.inline.hpp"
+#include "oops/valueKlass.hpp"
 #include "prims/jniCheck.hpp"
 #include "runtime/compilationPolicy.hpp"
 #include "runtime/handles.inline.hpp"
 #include "runtime/interfaceSupport.inline.hpp"
 #include "runtime/javaCalls.hpp"

@@ -156,26 +157,28 @@
 
 
 // Helper methods
 static BasicType runtime_type_from(JavaValue* result) {
   switch (result->get_type()) {
-    case T_BOOLEAN: // fall through
+    case T_BOOLEAN  : // fall through
     case T_CHAR   : // fall through
     case T_SHORT  : // fall through
     case T_INT    : // fall through
 #ifndef _LP64
     case T_OBJECT : // fall through
     case T_ARRAY  : // fall through
+    case T_VALUETYPE: // fall through
 #endif
     case T_BYTE   : // fall through
     case T_VOID   : return T_INT;
     case T_LONG   : return T_LONG;
     case T_FLOAT  : return T_FLOAT;
     case T_DOUBLE : return T_DOUBLE;
 #ifdef _LP64
     case T_ARRAY  : // fall through
-    case T_OBJECT:  return T_OBJECT;
+    case T_OBJECT   : return T_OBJECT;
+    case T_VALUETYPE: return T_VALUETYPE;
 #endif
     default:
       ShouldNotReachHere();
       return T_ILLEGAL;
   }

@@ -395,11 +398,12 @@
   }
 
   // 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.
   intptr_t* result_val_address = (intptr_t*)(result->get_value_addr());
 

@@ -615,10 +619,11 @@
   void do_short()                      { check_int(T_SHORT);         }
   void do_int()                        { check_int(T_INT);           }
   void do_long()                       { check_long(T_LONG);         }
   void do_void()                       { check_return_type(T_VOID);  }
   void do_object(int begin, int end)   { check_obj(T_OBJECT);        }
+  void do_valuetype(int begin, int end){ check_obj(T_VALUETYPE);     }
   void do_array(int begin, int end)    { check_obj(T_OBJECT);        }
 };
 
 
 void JavaCallArguments::verify(const methodHandle& method, BasicType return_type) {
< prev index next >