< prev index next >

src/hotspot/cpu/arm/templateInterpreterGenerator_arm.cpp

Print this page

 441     __ verify_oop(R0);
 442     break;
 443   default        : __ should_not_reach_here(); break;
 444   }
 445 
 446   __ ret();
 447   return entry;
 448 }
 449 
 450 address TemplateInterpreterGenerator::generate_safept_entry_for(TosState state, address runtime_entry) {
 451   address entry = __ pc();
 452   __ push(state);
 453   __ call_VM(noreg, runtime_entry);
 454 
 455   // load current bytecode
 456   __ ldrb(R3_bytecode, Address(Rbcp));
 457   __ dispatch_only_normal(vtos);
 458   return entry;
 459 }
 460 




 461 
 462 // Helpers for commoning out cases in the various type of method entries.
 463 //
 464 
 465 // increment invocation count & check for overflow
 466 //
 467 // Note: checking for negative value instead of overflow
 468 //       so we have a 'sticky' overflow test
 469 //
 470 // In: Rmethod.
 471 //
 472 // Uses R0, R1, Rtemp.
 473 //
 474 void TemplateInterpreterGenerator::generate_counter_incr(Label* overflow) {
 475   Label done;
 476   const Register Rcounters = Rtemp;
 477   const Address invocation_counter(Rcounters,
 478                 MethodCounters::invocation_counter_offset() +
 479                 InvocationCounter::counter_offset());
 480 

 441     __ verify_oop(R0);
 442     break;
 443   default        : __ should_not_reach_here(); break;
 444   }
 445 
 446   __ ret();
 447   return entry;
 448 }
 449 
 450 address TemplateInterpreterGenerator::generate_safept_entry_for(TosState state, address runtime_entry) {
 451   address entry = __ pc();
 452   __ push(state);
 453   __ call_VM(noreg, runtime_entry);
 454 
 455   // load current bytecode
 456   __ ldrb(R3_bytecode, Address(Rbcp));
 457   __ dispatch_only_normal(vtos);
 458   return entry;
 459 }
 460 
 461 address TemplateInterpreterGenerator::generate_cont_preempt_rerun_interpreter_adapter() {
 462   return nullptr;
 463 }
 464 
 465 
 466 // Helpers for commoning out cases in the various type of method entries.
 467 //
 468 
 469 // increment invocation count & check for overflow
 470 //
 471 // Note: checking for negative value instead of overflow
 472 //       so we have a 'sticky' overflow test
 473 //
 474 // In: Rmethod.
 475 //
 476 // Uses R0, R1, Rtemp.
 477 //
 478 void TemplateInterpreterGenerator::generate_counter_incr(Label* overflow) {
 479   Label done;
 480   const Register Rcounters = Rtemp;
 481   const Address invocation_counter(Rcounters,
 482                 MethodCounters::invocation_counter_offset() +
 483                 InvocationCounter::counter_offset());
 484 
< prev index next >