src/cpu/ppc/vm/templateInterpreterGenerator_ppc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8169206.02 Sdiff src/cpu/ppc/vm

src/cpu/ppc/vm/templateInterpreterGenerator_ppc.cpp

Print this page




 629   __ empty_expression_stack();
 630 
 631   __ load_const_optimized(R4_ARG2, (address) name, R11_scratch1);
 632   if (pass_oop) {
 633     __ mr(R5_ARG3, Rexception);
 634     __ call_VM(Rexception, CAST_FROM_FN_PTR(address, InterpreterRuntime::create_klass_exception), false);
 635   } else {
 636     __ load_const_optimized(R5_ARG3, (address) message, R11_scratch1);
 637     __ call_VM(Rexception, CAST_FROM_FN_PTR(address, InterpreterRuntime::create_exception), false);
 638   }
 639 
 640   // Throw exception.
 641   __ mr(R3_ARG1, Rexception);
 642   __ load_const_optimized(R11_scratch1, Interpreter::throw_exception_entry(), R12_scratch2);
 643   __ mtctr(R11_scratch1);
 644   __ bctr();
 645 
 646   return entry;
 647 }
 648 
 649 address TemplateInterpreterGenerator::generate_continuation_for(TosState state) {
 650   address entry = __ pc();
 651   __ unimplemented("generate_continuation_for");
 652   return entry;
 653 }
 654 
 655 // This entry is returned to when a call returns to the interpreter.
 656 // When we arrive here, we expect that the callee stack frame is already popped.
 657 address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step, size_t index_size) {
 658   address entry = __ pc();
 659 
 660   // Move the value out of the return register back to the TOS cache of current frame.
 661   switch (state) {
 662     case ltos:
 663     case btos:
 664     case ztos:
 665     case ctos:
 666     case stos:
 667     case atos:
 668     case itos: __ mr(R17_tos, R3_RET); break;   // RET -> TOS cache
 669     case ftos:
 670     case dtos: __ fmr(F15_ftos, F1_RET); break; // TOS cache -> GR_FRET
 671     case vtos: break;                           // Nothing to do, this was a void return.
 672     default  : ShouldNotReachHere();
 673   }
 674 




 629   __ empty_expression_stack();
 630 
 631   __ load_const_optimized(R4_ARG2, (address) name, R11_scratch1);
 632   if (pass_oop) {
 633     __ mr(R5_ARG3, Rexception);
 634     __ call_VM(Rexception, CAST_FROM_FN_PTR(address, InterpreterRuntime::create_klass_exception), false);
 635   } else {
 636     __ load_const_optimized(R5_ARG3, (address) message, R11_scratch1);
 637     __ call_VM(Rexception, CAST_FROM_FN_PTR(address, InterpreterRuntime::create_exception), false);
 638   }
 639 
 640   // Throw exception.
 641   __ mr(R3_ARG1, Rexception);
 642   __ load_const_optimized(R11_scratch1, Interpreter::throw_exception_entry(), R12_scratch2);
 643   __ mtctr(R11_scratch1);
 644   __ bctr();
 645 
 646   return entry;
 647 }
 648 






 649 // This entry is returned to when a call returns to the interpreter.
 650 // When we arrive here, we expect that the callee stack frame is already popped.
 651 address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step, size_t index_size) {
 652   address entry = __ pc();
 653 
 654   // Move the value out of the return register back to the TOS cache of current frame.
 655   switch (state) {
 656     case ltos:
 657     case btos:
 658     case ztos:
 659     case ctos:
 660     case stos:
 661     case atos:
 662     case itos: __ mr(R17_tos, R3_RET); break;   // RET -> TOS cache
 663     case ftos:
 664     case dtos: __ fmr(F15_ftos, F1_RET); break; // TOS cache -> GR_FRET
 665     case vtos: break;                           // Nothing to do, this was a void return.
 666     default  : ShouldNotReachHere();
 667   }
 668 


src/cpu/ppc/vm/templateInterpreterGenerator_ppc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File