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_resume_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
|