< prev index next >

src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp

Print this page

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





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

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