216 pc = Interpreter::remove_activation_preserving_args_entry(); 217 #else 218 // Do an uncommon trap type entry. c++ interpreter will know 219 // to pop frame and preserve the args 220 pc = Interpreter::deopt_entry(vtos, 0); 221 use_next_mdp = false; 222 #endif 223 } else { 224 // Reexecute invoke in top frame 225 pc = Interpreter::deopt_entry(vtos, 0); 226 use_next_mdp = false; 227 popframe_preserved_args_size_in_bytes = in_bytes(thread->popframe_preserved_args_size()); 228 // Note: the PopFrame-related extension of the expression stack size is done in 229 // Deoptimization::fetch_unroll_info_helper 230 popframe_preserved_args_size_in_words = in_words(thread->popframe_preserved_args_size_in_words()); 231 } 232 } else if (JvmtiExport::can_force_early_return() && state != NULL && state->is_earlyret_pending()) { 233 // Force early return from top frame after deoptimization 234 #ifndef CC_INTERP 235 pc = Interpreter::remove_activation_early_entry(state->earlyret_tos()); 236 #else 237 // TBD: Need to implement ForceEarlyReturn for CC_INTERP (ia64) 238 #endif 239 } else { 240 // Possibly override the previous pc computation of the top (youngest) frame 241 switch (exec_mode) { 242 case Deoptimization::Unpack_deopt: 243 // use what we've got 244 break; 245 case Deoptimization::Unpack_exception: 246 // exception is pending 247 pc = SharedRuntime::raw_exception_handler_for_return_address(thread, pc); 248 // [phh] We're going to end up in some handler or other, so it doesn't 249 // matter what mdp we point to. See exception_handler_for_exception() 250 // in interpreterRuntime.cpp. 251 break; 252 case Deoptimization::Unpack_uncommon_trap: 253 case Deoptimization::Unpack_reexecute: 254 // redo last byte code 255 pc = Interpreter::deopt_entry(vtos, 0); 256 use_next_mdp = false; 257 break; | 216 pc = Interpreter::remove_activation_preserving_args_entry(); 217 #else 218 // Do an uncommon trap type entry. c++ interpreter will know 219 // to pop frame and preserve the args 220 pc = Interpreter::deopt_entry(vtos, 0); 221 use_next_mdp = false; 222 #endif 223 } else { 224 // Reexecute invoke in top frame 225 pc = Interpreter::deopt_entry(vtos, 0); 226 use_next_mdp = false; 227 popframe_preserved_args_size_in_bytes = in_bytes(thread->popframe_preserved_args_size()); 228 // Note: the PopFrame-related extension of the expression stack size is done in 229 // Deoptimization::fetch_unroll_info_helper 230 popframe_preserved_args_size_in_words = in_words(thread->popframe_preserved_args_size_in_words()); 231 } 232 } else if (JvmtiExport::can_force_early_return() && state != NULL && state->is_earlyret_pending()) { 233 // Force early return from top frame after deoptimization 234 #ifndef CC_INTERP 235 pc = Interpreter::remove_activation_early_entry(state->earlyret_tos()); 236 #endif 237 } else { 238 // Possibly override the previous pc computation of the top (youngest) frame 239 switch (exec_mode) { 240 case Deoptimization::Unpack_deopt: 241 // use what we've got 242 break; 243 case Deoptimization::Unpack_exception: 244 // exception is pending 245 pc = SharedRuntime::raw_exception_handler_for_return_address(thread, pc); 246 // [phh] We're going to end up in some handler or other, so it doesn't 247 // matter what mdp we point to. See exception_handler_for_exception() 248 // in interpreterRuntime.cpp. 249 break; 250 case Deoptimization::Unpack_uncommon_trap: 251 case Deoptimization::Unpack_reexecute: 252 // redo last byte code 253 pc = Interpreter::deopt_entry(vtos, 0); 254 use_next_mdp = false; 255 break; |