545 case ftos: vep = __ pc(); __ pop(ftos); fep = __ pc(); generate_and_dispatch(t); break;
546 case dtos: vep = __ pc(); __ pop(dtos); dep = __ pc(); generate_and_dispatch(t); break;
547 case vtos: set_vtos_entry_points(t, bep, cep, sep, aep, iep, lep, fep, dep, vep); break;
548 default : ShouldNotReachHere(); break;
549 }
550 }
551
552
553 //------------------------------------------------------------------------------------------------------------------------
554
555 void TemplateInterpreterGenerator::generate_and_dispatch(Template* t, TosState tos_out) {
556 if (PrintBytecodeHistogram) histogram_bytecode(t);
557 #ifndef PRODUCT
558 // debugging code
559 if (CountBytecodes || TraceBytecodes || StopInterpreterAt > 0) count_bytecode();
560 if (PrintBytecodePairHistogram) histogram_bytecode_pair(t);
561 if (TraceBytecodes) trace_bytecode(t);
562 if (StopInterpreterAt > 0) stop_interpreter_at();
563 __ verify_FPU(1, t->tos_in());
564 #endif // !PRODUCT
565 int step;
566 if (!t->does_dispatch()) {
567 step = t->is_wide() ? Bytecodes::wide_length_for(t->bytecode()) : Bytecodes::length_for(t->bytecode());
568 if (tos_out == ilgl) tos_out = t->tos_out();
569 // compute bytecode size
570 assert(step > 0, "just checkin'");
571 // setup stuff for dispatching next bytecode
572 if (ProfileInterpreter && VerifyDataPointer
573 && MethodData::bytecode_has_profile(t->bytecode())) {
574 __ verify_method_data_pointer();
575 }
576 __ dispatch_prolog(tos_out, step);
577 }
578 // generate template
579 t->generate(_masm);
580 // advance
581 if (t->does_dispatch()) {
582 #ifdef ASSERT
583 // make sure execution doesn't go beyond this point if code is broken
584 __ should_not_reach_here();
585 #endif // ASSERT
|
545 case ftos: vep = __ pc(); __ pop(ftos); fep = __ pc(); generate_and_dispatch(t); break;
546 case dtos: vep = __ pc(); __ pop(dtos); dep = __ pc(); generate_and_dispatch(t); break;
547 case vtos: set_vtos_entry_points(t, bep, cep, sep, aep, iep, lep, fep, dep, vep); break;
548 default : ShouldNotReachHere(); break;
549 }
550 }
551
552
553 //------------------------------------------------------------------------------------------------------------------------
554
555 void TemplateInterpreterGenerator::generate_and_dispatch(Template* t, TosState tos_out) {
556 if (PrintBytecodeHistogram) histogram_bytecode(t);
557 #ifndef PRODUCT
558 // debugging code
559 if (CountBytecodes || TraceBytecodes || StopInterpreterAt > 0) count_bytecode();
560 if (PrintBytecodePairHistogram) histogram_bytecode_pair(t);
561 if (TraceBytecodes) trace_bytecode(t);
562 if (StopInterpreterAt > 0) stop_interpreter_at();
563 __ verify_FPU(1, t->tos_in());
564 #endif // !PRODUCT
565 int step = 0;
566 if (!t->does_dispatch()) {
567 step = t->is_wide() ? Bytecodes::wide_length_for(t->bytecode()) : Bytecodes::length_for(t->bytecode());
568 if (tos_out == ilgl) tos_out = t->tos_out();
569 // compute bytecode size
570 assert(step > 0, "just checkin'");
571 // setup stuff for dispatching next bytecode
572 if (ProfileInterpreter && VerifyDataPointer
573 && MethodData::bytecode_has_profile(t->bytecode())) {
574 __ verify_method_data_pointer();
575 }
576 __ dispatch_prolog(tos_out, step);
577 }
578 // generate template
579 t->generate(_masm);
580 // advance
581 if (t->does_dispatch()) {
582 #ifdef ASSERT
583 // make sure execution doesn't go beyond this point if code is broken
584 __ should_not_reach_here();
585 #endif // ASSERT
|