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