< prev index next >
src/share/vm/runtime/sharedRuntime.hpp
Print this page
@@ -35,52 +35,11 @@
class AdapterHandlerEntry;
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
// shared functionality such as exception forwarding (C++ to
// Java exceptions), locking/unlocking mechanisms, statistical
@@ -121,11 +80,11 @@
private:
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);
// max bytes for each dtrace string parameter
enum { max_dtrace_string_size = 256 };
@@ -413,10 +372,13 @@
// 4-bytes higher. So for sparc because the register window save area is at
// the bottom of the frame the first 16 words will be skipped and SharedInfo::stack0
// 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,
const VMRegPair* regs) NOT_DEBUG_RETURN;
@@ -541,10 +503,13 @@
// Resolving of calls
static address resolve_static_call_C (JavaThread *thread);
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,
jint length, JavaThread* thread);
< prev index next >