< prev index next >

src/hotspot/share/interpreter/templateInterpreterGenerator.cpp

Print this page

351     case btos:
352     case ztos:
353     case ctos:
354     case stos:
355       ShouldNotReachHere();  // btos/ctos/stos should use itos.
356       break;
357     case atos: vep = __ pc(); __ pop(atos); aep = __ pc(); generate_and_dispatch(t); break;
358     case itos: vep = __ pc(); __ pop(itos); iep = __ pc(); generate_and_dispatch(t); break;
359     case ltos: vep = __ pc(); __ pop(ltos); lep = __ pc(); generate_and_dispatch(t); break;
360     case ftos: vep = __ pc(); __ pop(ftos); fep = __ pc(); generate_and_dispatch(t); break;
361     case dtos: vep = __ pc(); __ pop(dtos); dep = __ pc(); generate_and_dispatch(t); break;
362     case vtos: set_vtos_entry_points(t, bep, cep, sep, aep, iep, lep, fep, dep, vep);     break;
363     default  : ShouldNotReachHere();                                                 break;
364   }
365 }
366 
367 
368 //------------------------------------------------------------------------------------------------------------------------
369 
370 void TemplateInterpreterGenerator::generate_and_dispatch(Template* t, TosState tos_out) {




371 #ifndef PRODUCT
372   // debugging code
373   if (CountBytecodes || TraceBytecodes || StopInterpreterAt > 0) count_bytecode();
374   if (PrintBytecodeHistogram)                                    histogram_bytecode(t);
375   if (PrintBytecodePairHistogram)                                histogram_bytecode_pair(t);
376   if (TraceBytecodes)                                            trace_bytecode(t);
377   if (StopInterpreterAt > 0)                                     stop_interpreter_at();
378   __ verify_FPU(1, t->tos_in());
379 #endif // !PRODUCT
380   int step = 0;
381   if (!t->does_dispatch()) {
382     step = t->is_wide() ? Bytecodes::wide_length_for(t->bytecode()) : Bytecodes::length_for(t->bytecode());
383     if (tos_out == ilgl) tos_out = t->tos_out();
384     // compute bytecode size
385     assert(step > 0, "just checkin'");
386     // setup stuff for dispatching next bytecode
387     if (ProfileInterpreter && VerifyDataPointer
388         && MethodData::bytecode_has_profile(t->bytecode())) {
389       __ verify_method_data_pointer();
390     }
391     __ dispatch_prolog(tos_out, step);
392   }
393   // generate template
394   t->generate(_masm);

351     case btos:
352     case ztos:
353     case ctos:
354     case stos:
355       ShouldNotReachHere();  // btos/ctos/stos should use itos.
356       break;
357     case atos: vep = __ pc(); __ pop(atos); aep = __ pc(); generate_and_dispatch(t); break;
358     case itos: vep = __ pc(); __ pop(itos); iep = __ pc(); generate_and_dispatch(t); break;
359     case ltos: vep = __ pc(); __ pop(ltos); lep = __ pc(); generate_and_dispatch(t); break;
360     case ftos: vep = __ pc(); __ pop(ftos); fep = __ pc(); generate_and_dispatch(t); break;
361     case dtos: vep = __ pc(); __ pop(dtos); dep = __ pc(); generate_and_dispatch(t); break;
362     case vtos: set_vtos_entry_points(t, bep, cep, sep, aep, iep, lep, fep, dep, vep);     break;
363     default  : ShouldNotReachHere();                                                 break;
364   }
365 }
366 
367 
368 //------------------------------------------------------------------------------------------------------------------------
369 
370 void TemplateInterpreterGenerator::generate_and_dispatch(Template* t, TosState tos_out) {
371   if (CountBytecodes || CountBytecodesPerThread || TraceBytecodes || StopInterpreterAt > 0) {
372     count_bytecode();
373   }
374   if (PrintBytecodeHistogram)                                    histogram_bytecode(t);
375 #ifndef PRODUCT
376   // debugging code


377   if (PrintBytecodePairHistogram)                                histogram_bytecode_pair(t);
378   if (TraceBytecodes)                                            trace_bytecode(t);
379   if (StopInterpreterAt > 0)                                     stop_interpreter_at();
380   __ verify_FPU(1, t->tos_in());
381 #endif // !PRODUCT
382   int step = 0;
383   if (!t->does_dispatch()) {
384     step = t->is_wide() ? Bytecodes::wide_length_for(t->bytecode()) : Bytecodes::length_for(t->bytecode());
385     if (tos_out == ilgl) tos_out = t->tos_out();
386     // compute bytecode size
387     assert(step > 0, "just checkin'");
388     // setup stuff for dispatching next bytecode
389     if (ProfileInterpreter && VerifyDataPointer
390         && MethodData::bytecode_has_profile(t->bytecode())) {
391       __ verify_method_data_pointer();
392     }
393     __ dispatch_prolog(tos_out, step);
394   }
395   // generate template
396   t->generate(_masm);
< prev index next >