--- old/src/share/vm/runtime/sharedRuntime.hpp 2017-06-01 17:27:48.273199433 +0200 +++ new/src/share/vm/runtime/sharedRuntime.hpp 2017-06-01 17:27:48.198199530 +0200 @@ -37,48 +37,7 @@ class AdapterHandlerTable; class AdapterFingerPrint; class vframeStream; - -// Used for adapter generation. One SigEntry is used per element of -// the signature of the method. Value type arguments are treated -// specially. See comment for collect_fields(). -class SigEntry VALUE_OBJ_CLASS_SPEC { - public: - BasicType _bt; - int _offset; - - SigEntry() - : _bt(T_ILLEGAL), _offset(-1) { - } - SigEntry(BasicType bt, int offset) - : _bt(bt), _offset(offset) {} - - SigEntry(BasicType bt) - : _bt(bt), _offset(-1) {} - - static int compare(SigEntry* e1, SigEntry* e2) { - if (e1->_offset != e2->_offset) { - return e1->_offset - e2->_offset; - } - assert((e1->_bt == T_LONG && (e2->_bt == T_LONG || e2->_bt == T_VOID)) || - (e1->_bt == T_DOUBLE && (e2->_bt == T_DOUBLE || e2->_bt == T_VOID)) || - e1->_bt == T_VALUETYPE || e2->_bt == T_VALUETYPE || e1->_bt == T_VOID || e2->_bt == T_VOID, "bad bt"); - if (e1->_bt == e2->_bt) { - assert(e1->_bt == T_VALUETYPE || e1->_bt == T_VOID, "only ones with duplicate offsets"); - return 0; - } - if (e1->_bt == T_VOID || - e2->_bt == T_VALUETYPE) { - return 1; - } - if (e1->_bt == T_VALUETYPE || - e2->_bt == T_VOID) { - return -1; - } - ShouldNotReachHere(); - return 0; - } -}; - +class SigEntry; // Runtime is the base class for various runtime interfaces // (InterpreterRuntime, CompilerRuntime, etc.). It provides @@ -123,7 +82,7 @@ enum { POLL_AT_RETURN, POLL_AT_LOOP, POLL_AT_VECTOR_LOOP }; static SafepointBlob* generate_handler_blob(address call_ptr, int poll_type); static RuntimeStub* generate_resolve_blob(address destination, const char* name); - + static RuntimeStub* generate_return_value_blob(address destination, const char* name); public: static void generate_stubs(void); @@ -415,6 +374,9 @@ // will be just above it. ( // return value is the maximum number of VMReg stack slots the convention will use. static int java_calling_convention(const BasicType* sig_bt, VMRegPair* regs, int total_args_passed, int is_outgoing); + static int java_return_convention(const BasicType* sig_bt, VMRegPair* regs, int total_args_passed); + static const uint java_return_convention_max_int; + static const uint java_return_convention_max_float; static void check_member_name_argument_is_last_argument(const methodHandle& method, const BasicType* sig_bt, @@ -543,6 +505,9 @@ static address resolve_virtual_call_C (JavaThread *thread); static address resolve_opt_virtual_call_C(JavaThread *thread); + static void load_value_type_fields_in_regs(JavaThread *thread, oopDesc* res); + static void store_value_type_fields_to_buf(JavaThread *thread, intptr_t res); + // arraycopy, the non-leaf version. (See StubRoutines for all the leaf calls.) static void slow_arraycopy_C(oopDesc* src, jint src_pos, oopDesc* dest, jint dest_pos,