< prev index next >

src/hotspot/share/opto/runtime.cpp

Print this page

        

@@ -101,10 +101,11 @@
 address OptoRuntime::_monitor_notifyAll_Java                      = NULL;
 address OptoRuntime::_rethrow_Java                                = NULL;
 
 address OptoRuntime::_slow_arraycopy_Java                         = NULL;
 address OptoRuntime::_register_finalizer_Java                     = NULL;
+address OptoRuntime::_continuation_getFP_Java                     = NULL;
 
 ExceptionBlob* OptoRuntime::_exception_blob;
 
 // This should be called in an assertion at the start of OptoRuntime routines
 // which are entered from compiled code (all of them)

@@ -144,10 +145,11 @@
   gen(env, _monitor_notifyAll_Java         , monitor_notify_Type          , monitor_notifyAll_C             ,    0 , false, false, false);
   gen(env, _rethrow_Java                   , rethrow_Type                 , rethrow_C                       ,    2 , true , false, true );
 
   gen(env, _slow_arraycopy_Java            , slow_arraycopy_Type          , SharedRuntime::slow_arraycopy_C ,    0 , false, false, false);
   gen(env, _register_finalizer_Java        , register_finalizer_Type      , register_finalizer              ,    0 , false, false, false);
+  gen(env, _continuation_getFP_Java        , void_long_Type               , SharedRuntime::continuation_getFP,    0 , false, false, false);
 
   return true;
 }
 
 #undef gen

@@ -690,10 +692,50 @@
   const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+2, fields);
 
   return TypeFunc::make(domain, range);
 }
 
+const TypeFunc* OptoRuntime::void_void_Type() {
+   // create input type (domain)
+   const Type **fields = TypeTuple::fields(0);
+   const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+0, fields);
+
+   // create result type (range)
+   fields = TypeTuple::fields(0);
+   const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+0, fields);
+   return TypeFunc::make(domain, range);
+ }
+
+ const TypeFunc* OptoRuntime::continuation_doYield_Type() {
+   const Type**fields = TypeTuple::fields(1);
+   fields[TypeFunc::Parms+0] = TypeInt::INT;
+   const TypeTuple *args = TypeTuple::make(TypeFunc::Parms+1, fields);
+
+   fields = TypeTuple::fields(1);
+   fields[TypeFunc::Parms+0] = TypeInt::INT;
+   const TypeTuple *result = TypeTuple::make(TypeFunc::Parms+1, fields);
+
+   return TypeFunc::make(args, result);
+ }
+
+ const TypeFunc* OptoRuntime::continuation_jump_Type() {
+  // create input type (domain)
+  const Type **fields = TypeTuple::fields(6);
+  fields[TypeFunc::Parms+0] = TypeLong::LONG;
+  fields[TypeFunc::Parms+1] = Type::HALF;
+  fields[TypeFunc::Parms+2] = TypeLong::LONG;
+  fields[TypeFunc::Parms+3] = Type::HALF;
+  fields[TypeFunc::Parms+4] = TypeLong::LONG;
+  fields[TypeFunc::Parms+5] = Type::HALF;
+  const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+6, fields);
+
+  // create result type (range)
+  fields = TypeTuple::fields(0);
+  const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+0, fields);
+  return TypeFunc::make(domain, range);
+ }
+
 // arraycopy stub variations:
 enum ArrayCopyType {
   ac_fast,                      // void(ptr, ptr, size_t)
   ac_checkcast,                 //  int(ptr, ptr, size_t, size_t, ptr)
   ac_slow,                      // void(ptr, int, ptr, int, int)
< prev index next >