< 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 >