hotspot/src/share/vm/opto/runtime.cpp
changeset 10566 630c177ec580
parent 10508 233d2e7c462d
child 10731 ffe24d6f0575
equal deleted inserted replaced
10565:dc90c239f4ec 10566:630c177ec580
   100 
   100 
   101 
   101 
   102 // Compiled code entry points
   102 // Compiled code entry points
   103 address OptoRuntime::_new_instance_Java                           = NULL;
   103 address OptoRuntime::_new_instance_Java                           = NULL;
   104 address OptoRuntime::_new_array_Java                              = NULL;
   104 address OptoRuntime::_new_array_Java                              = NULL;
       
   105 address OptoRuntime::_new_array_nozero_Java                       = NULL;
   105 address OptoRuntime::_multianewarray2_Java                        = NULL;
   106 address OptoRuntime::_multianewarray2_Java                        = NULL;
   106 address OptoRuntime::_multianewarray3_Java                        = NULL;
   107 address OptoRuntime::_multianewarray3_Java                        = NULL;
   107 address OptoRuntime::_multianewarray4_Java                        = NULL;
   108 address OptoRuntime::_multianewarray4_Java                        = NULL;
   108 address OptoRuntime::_multianewarray5_Java                        = NULL;
   109 address OptoRuntime::_multianewarray5_Java                        = NULL;
   109 address OptoRuntime::_multianewarrayN_Java                        = NULL;
   110 address OptoRuntime::_multianewarrayN_Java                        = NULL;
   149   //
   150   //
   150   //   variable/name                       type-function-gen              , runtime method                  ,fncy_jp, tls,save_args,retpc
   151   //   variable/name                       type-function-gen              , runtime method                  ,fncy_jp, tls,save_args,retpc
   151   // -------------------------------------------------------------------------------------------------------------------------------
   152   // -------------------------------------------------------------------------------------------------------------------------------
   152   gen(env, _new_instance_Java              , new_instance_Type            , new_instance_C                  ,    0 , true , false, false);
   153   gen(env, _new_instance_Java              , new_instance_Type            , new_instance_C                  ,    0 , true , false, false);
   153   gen(env, _new_array_Java                 , new_array_Type               , new_array_C                     ,    0 , true , false, false);
   154   gen(env, _new_array_Java                 , new_array_Type               , new_array_C                     ,    0 , true , false, false);
       
   155   gen(env, _new_array_nozero_Java          , new_array_Type               , new_array_nozero_C              ,    0 , true , false, false);
   154   gen(env, _multianewarray2_Java           , multianewarray2_Type         , multianewarray2_C               ,    0 , true , false, false);
   156   gen(env, _multianewarray2_Java           , multianewarray2_Type         , multianewarray2_C               ,    0 , true , false, false);
   155   gen(env, _multianewarray3_Java           , multianewarray3_Type         , multianewarray3_C               ,    0 , true , false, false);
   157   gen(env, _multianewarray3_Java           , multianewarray3_Type         , multianewarray3_C               ,    0 , true , false, false);
   156   gen(env, _multianewarray4_Java           , multianewarray4_Type         , multianewarray4_C               ,    0 , true , false, false);
   158   gen(env, _multianewarray4_Java           , multianewarray4_Type         , multianewarray4_C               ,    0 , true , false, false);
   157   gen(env, _multianewarray5_Java           , multianewarray5_Type         , multianewarray5_C               ,    0 , true , false, false);
   159   gen(env, _multianewarray5_Java           , multianewarray5_Type         , multianewarray5_C               ,    0 , true , false, false);
   158   gen(env, _multianewarrayN_Java           , multianewarrayN_Type         , multianewarrayN_C               ,    0 , true , false, false);
   160   gen(env, _multianewarrayN_Java           , multianewarrayN_Type         , multianewarrayN_C               ,    0 , true , false, false);
   291     // the compiler prefers the array_type, since it must already have
   293     // the compiler prefers the array_type, since it must already have
   292     // that latter value in hand for the fast path.
   294     // that latter value in hand for the fast path.
   293     klassOopDesc* elem_type = objArrayKlass::cast(array_type)->element_klass();
   295     klassOopDesc* elem_type = objArrayKlass::cast(array_type)->element_klass();
   294     result = oopFactory::new_objArray(elem_type, len, THREAD);
   296     result = oopFactory::new_objArray(elem_type, len, THREAD);
   295   }
   297   }
       
   298 
       
   299   // Pass oops back through thread local storage.  Our apparent type to Java
       
   300   // is that we return an oop, but we can block on exit from this routine and
       
   301   // a GC can trash the oop in C's return register.  The generated stub will
       
   302   // fetch the oop from TLS after any possible GC.
       
   303   deoptimize_caller_frame(thread, HAS_PENDING_EXCEPTION);
       
   304   thread->set_vm_result(result);
       
   305   JRT_BLOCK_END;
       
   306 
       
   307   if (GraphKit::use_ReduceInitialCardMarks()) {
       
   308     // inform GC that we won't do card marks for initializing writes.
       
   309     new_store_pre_barrier(thread);
       
   310   }
       
   311 JRT_END
       
   312 
       
   313 // array allocation without zeroing
       
   314 JRT_BLOCK_ENTRY(void, OptoRuntime::new_array_nozero_C(klassOopDesc* array_type, int len, JavaThread *thread))
       
   315   JRT_BLOCK;
       
   316 #ifndef PRODUCT
       
   317   SharedRuntime::_new_array_ctr++;            // new array requires GC
       
   318 #endif
       
   319   assert(check_compiled_frame(thread), "incorrect caller");
       
   320 
       
   321   // Scavenge and allocate an instance.
       
   322   oop result;
       
   323 
       
   324   assert(Klass::cast(array_type)->oop_is_typeArray(), "should be called only for type array");
       
   325   // The oopFactory likes to work with the element type.
       
   326   BasicType elem_type = typeArrayKlass::cast(array_type)->element_type();
       
   327   result = oopFactory::new_typeArray_nozero(elem_type, len, THREAD);
   296 
   328 
   297   // Pass oops back through thread local storage.  Our apparent type to Java
   329   // Pass oops back through thread local storage.  Our apparent type to Java
   298   // is that we return an oop, but we can block on exit from this routine and
   330   // is that we return an oop, but we can block on exit from this routine and
   299   // a GC can trash the oop in C's return register.  The generated stub will
   331   // a GC can trash the oop in C's return register.  The generated stub will
   300   // fetch the oop from TLS after any possible GC.
   332   // fetch the oop from TLS after any possible GC.