src/share/vm/opto/runtime.cpp

Print this page




 121 address OptoRuntime::_zap_dead_Java_locals_Java                   = NULL;
 122 address OptoRuntime::_zap_dead_native_locals_Java                 = NULL;
 123 # endif
 124 
 125 ExceptionBlob* OptoRuntime::_exception_blob;
 126 
 127 // This should be called in an assertion at the start of OptoRuntime routines
 128 // which are entered from compiled code (all of them)
 129 #ifdef ASSERT
 130 static bool check_compiled_frame(JavaThread* thread) {
 131   assert(thread->last_frame().is_runtime_frame(), "cannot call runtime directly from compiled code");
 132   RegisterMap map(thread, false);
 133   frame caller = thread->last_frame().sender(&map);
 134   assert(caller.is_compiled_frame(), "not being called from compiled like code");
 135   return true;
 136 }
 137 #endif // ASSERT
 138 
 139 
 140 #define gen(env, var, type_func_gen, c_func, fancy_jump, pass_tls, save_arg_regs, return_pc) \
 141   var = generate_stub(env, type_func_gen, CAST_FROM_FN_PTR(address, c_func), #var, fancy_jump, pass_tls, save_arg_regs, return_pc)

 142 
 143 void OptoRuntime::generate(ciEnv* env) {
 144 
 145   generate_exception_blob();
 146 
 147   // Note: tls: Means fetching the return oop out of the thread-local storage
 148   //
 149   //   variable/name                       type-function-gen              , runtime method                  ,fncy_jp, tls,save_args,retpc
 150   // -------------------------------------------------------------------------------------------------------------------------------
 151   gen(env, _new_instance_Java              , new_instance_Type            , new_instance_C                  ,    0 , true , false, false);
 152   gen(env, _new_array_Java                 , new_array_Type               , new_array_C                     ,    0 , true , false, false);
 153   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);
 155   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);
 157   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);
 159   gen(env, _g1_wb_pre_Java                 , g1_wb_pre_Type               , SharedRuntime::g1_wb_pre        ,    0 , false, false, false);
 160   gen(env, _g1_wb_post_Java                , g1_wb_post_Type              , SharedRuntime::g1_wb_post       ,    0 , false, false, false);
 161   gen(env, _complete_monitor_locking_Java  , complete_monitor_enter_Type  , SharedRuntime::complete_monitor_locking_C      ,    0 , false, false, false);
 162   gen(env, _rethrow_Java                   , rethrow_Type                 , rethrow_C                       ,    2 , true , false, true );
 163 
 164   gen(env, _slow_arraycopy_Java            , slow_arraycopy_Type          , SharedRuntime::slow_arraycopy_C ,    0 , false, false, false);
 165   gen(env, _register_finalizer_Java        , register_finalizer_Type      , register_finalizer              ,    0 , false, false, false);
 166 
 167 # ifdef ENABLE_ZAP_DEAD_LOCALS
 168   gen(env, _zap_dead_Java_locals_Java      , zap_dead_locals_Type         , zap_dead_Java_locals_C          ,    0 , false, true , false );
 169   gen(env, _zap_dead_native_locals_Java    , zap_dead_locals_Type         , zap_dead_native_locals_C        ,    0 , false, true , false );
 170 # endif
 171 
 172 }
 173 
 174 #undef gen
 175 
 176 
 177 // Helper method to do generation of RunTimeStub's
 178 address OptoRuntime::generate_stub( ciEnv* env,
 179                                     TypeFunc_generator gen, address C_function,
 180                                     const char *name, int is_fancy_jump,
 181                                     bool pass_tls,
 182                                     bool save_argument_registers,
 183                                     bool return_pc ) {
 184   ResourceMark rm;
 185   Compile C( env, gen, C_function, name, is_fancy_jump, pass_tls, save_argument_registers, return_pc );
 186   return  C.stub_entry_point();
 187 }
 188 
 189 const char* OptoRuntime::stub_name(address entry) {
 190 #ifndef PRODUCT
 191   CodeBlob* cb = CodeCache::find_blob(entry);




 121 address OptoRuntime::_zap_dead_Java_locals_Java                   = NULL;
 122 address OptoRuntime::_zap_dead_native_locals_Java                 = NULL;
 123 # endif
 124 
 125 ExceptionBlob* OptoRuntime::_exception_blob;
 126 
 127 // This should be called in an assertion at the start of OptoRuntime routines
 128 // which are entered from compiled code (all of them)
 129 #ifdef ASSERT
 130 static bool check_compiled_frame(JavaThread* thread) {
 131   assert(thread->last_frame().is_runtime_frame(), "cannot call runtime directly from compiled code");
 132   RegisterMap map(thread, false);
 133   frame caller = thread->last_frame().sender(&map);
 134   assert(caller.is_compiled_frame(), "not being called from compiled like code");
 135   return true;
 136 }
 137 #endif // ASSERT
 138 
 139 
 140 #define gen(env, var, type_func_gen, c_func, fancy_jump, pass_tls, save_arg_regs, return_pc) \
 141   var = generate_stub(env, type_func_gen, CAST_FROM_FN_PTR(address, c_func), #var, fancy_jump, pass_tls, save_arg_regs, return_pc); \
 142   if (var == NULL) { return false; }
 143 
 144 bool OptoRuntime::generate(ciEnv* env) {
 145 
 146   generate_exception_blob();
 147 
 148   // Note: tls: Means fetching the return oop out of the thread-local storage
 149   //
 150   //   variable/name                       type-function-gen              , runtime method                  ,fncy_jp, tls,save_args,retpc
 151   // -------------------------------------------------------------------------------------------------------------------------------
 152   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_nozero_Java          , new_array_Type               , new_array_nozero_C              ,    0 , true , false, false);
 155   gen(env, _multianewarray2_Java           , multianewarray2_Type         , multianewarray2_C               ,    0 , true , false, false);
 156   gen(env, _multianewarray3_Java           , multianewarray3_Type         , multianewarray3_C               ,    0 , true , false, false);
 157   gen(env, _multianewarray4_Java           , multianewarray4_Type         , multianewarray4_C               ,    0 , true , false, false);
 158   gen(env, _multianewarray5_Java           , multianewarray5_Type         , multianewarray5_C               ,    0 , true , false, false);
 159   gen(env, _multianewarrayN_Java           , multianewarrayN_Type         , multianewarrayN_C               ,    0 , true , false, false);
 160   gen(env, _g1_wb_pre_Java                 , g1_wb_pre_Type               , SharedRuntime::g1_wb_pre        ,    0 , false, false, false);
 161   gen(env, _g1_wb_post_Java                , g1_wb_post_Type              , SharedRuntime::g1_wb_post       ,    0 , false, false, false);
 162   gen(env, _complete_monitor_locking_Java  , complete_monitor_enter_Type  , SharedRuntime::complete_monitor_locking_C, 0, false, false, false);
 163   gen(env, _rethrow_Java                   , rethrow_Type                 , rethrow_C                       ,    2 , true , false, true );
 164 
 165   gen(env, _slow_arraycopy_Java            , slow_arraycopy_Type          , SharedRuntime::slow_arraycopy_C ,    0 , false, false, false);
 166   gen(env, _register_finalizer_Java        , register_finalizer_Type      , register_finalizer              ,    0 , false, false, false);
 167 
 168 # ifdef ENABLE_ZAP_DEAD_LOCALS
 169   gen(env, _zap_dead_Java_locals_Java      , zap_dead_locals_Type         , zap_dead_Java_locals_C          ,    0 , false, true , false );
 170   gen(env, _zap_dead_native_locals_Java    , zap_dead_locals_Type         , zap_dead_native_locals_C        ,    0 , false, true , false );
 171 # endif
 172   return true;
 173 }
 174 
 175 #undef gen
 176 
 177 
 178 // Helper method to do generation of RunTimeStub's
 179 address OptoRuntime::generate_stub( ciEnv* env,
 180                                     TypeFunc_generator gen, address C_function,
 181                                     const char *name, int is_fancy_jump,
 182                                     bool pass_tls,
 183                                     bool save_argument_registers,
 184                                     bool return_pc ) {
 185   ResourceMark rm;
 186   Compile C( env, gen, C_function, name, is_fancy_jump, pass_tls, save_argument_registers, return_pc );
 187   return  C.stub_entry_point();
 188 }
 189 
 190 const char* OptoRuntime::stub_name(address entry) {
 191 #ifndef PRODUCT
 192   CodeBlob* cb = CodeCache::find_blob(entry);