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