< prev index next >

src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp

Print this page

 681     __ dispatch_next(state, step);
 682   } else {
 683     __ jump_to_entry(continuation, R11_scratch1);
 684   }
 685 
 686   return entry;
 687 }
 688 
 689 address TemplateInterpreterGenerator::generate_safept_entry_for(TosState state, address runtime_entry) {
 690   address entry = __ pc();
 691 
 692   __ push(state);
 693   __ push_cont_fastpath();
 694   __ call_VM(noreg, runtime_entry);
 695   __ pop_cont_fastpath();
 696   __ dispatch_via(vtos, Interpreter::_normal_table.table_for(vtos));
 697 
 698   return entry;
 699 }
 700 





 701 // Helpers for commoning out cases in the various type of method entries.
 702 
 703 // Increment invocation count & check for overflow.
 704 //
 705 // Note: checking for negative value instead of overflow
 706 //       so we have a 'sticky' overflow test.
 707 //
 708 void TemplateInterpreterGenerator::generate_counter_incr(Label* overflow) {
 709   // Note: In tiered we increment either counters in method or in MDO depending if we're profiling or not.
 710   Register Rscratch1   = R11_scratch1;
 711   Register Rscratch2   = R12_scratch2;
 712   Register R3_counters = R3_ARG1;
 713   Label done;
 714 
 715   const int increment = InvocationCounter::count_increment;
 716   Label no_mdo;
 717   if (ProfileInterpreter) {
 718     const Register Rmdo = R3_counters;
 719     __ ld(Rmdo, in_bytes(Method::method_data_offset()), R19_method);
 720     __ cmpdi(CCR0, Rmdo, 0);

 681     __ dispatch_next(state, step);
 682   } else {
 683     __ jump_to_entry(continuation, R11_scratch1);
 684   }
 685 
 686   return entry;
 687 }
 688 
 689 address TemplateInterpreterGenerator::generate_safept_entry_for(TosState state, address runtime_entry) {
 690   address entry = __ pc();
 691 
 692   __ push(state);
 693   __ push_cont_fastpath();
 694   __ call_VM(noreg, runtime_entry);
 695   __ pop_cont_fastpath();
 696   __ dispatch_via(vtos, Interpreter::_normal_table.table_for(vtos));
 697 
 698   return entry;
 699 }
 700 
 701 address TemplateInterpreterGenerator::generate_cont_preempt_rerun_interpreter_adapter() {
 702   return nullptr;
 703 }
 704 
 705 
 706 // Helpers for commoning out cases in the various type of method entries.
 707 
 708 // Increment invocation count & check for overflow.
 709 //
 710 // Note: checking for negative value instead of overflow
 711 //       so we have a 'sticky' overflow test.
 712 //
 713 void TemplateInterpreterGenerator::generate_counter_incr(Label* overflow) {
 714   // Note: In tiered we increment either counters in method or in MDO depending if we're profiling or not.
 715   Register Rscratch1   = R11_scratch1;
 716   Register Rscratch2   = R12_scratch2;
 717   Register R3_counters = R3_ARG1;
 718   Label done;
 719 
 720   const int increment = InvocationCounter::count_increment;
 721   Label no_mdo;
 722   if (ProfileInterpreter) {
 723     const Register Rmdo = R3_counters;
 724     __ ld(Rmdo, in_bytes(Method::method_data_offset()), R19_method);
 725     __ cmpdi(CCR0, Rmdo, 0);
< prev index next >