625 Z_ARG2, Z_tos /*object (see TT::aastore())*/); 626 } else { 627 if (message != NULL) { 628 __ load_absolute_address(Z_ARG3, (address)message); 629 } else { 630 __ clear_reg(Z_ARG3, true, false); 631 } 632 __ call_VM(Z_tos, 633 CAST_FROM_FN_PTR(address, InterpreterRuntime::create_exception), 634 Z_ARG2, Z_ARG3); 635 } 636 // Throw exception. 637 __ load_absolute_address(Z_R1_scratch, Interpreter::throw_exception_entry()); 638 __ z_br(Z_R1_scratch); 639 640 BLOCK_COMMENT("} exception_handler_common"); 641 642 return entry; 643 } 644 645 // Unused, should never pass by. 646 address TemplateInterpreterGenerator::generate_continuation_for (TosState state) { 647 address entry = __ pc(); 648 __ should_not_reach_here(); 649 return entry; 650 } 651 652 address TemplateInterpreterGenerator::generate_return_entry_for (TosState state, int step, size_t index_size) { 653 address entry = __ pc(); 654 655 BLOCK_COMMENT("return_entry {"); 656 657 // Pop i2c extension or revert top-2-parent-resize done by interpreted callees. 658 Register sp_before_i2c_extension = Z_bcp; 659 __ z_lg(Z_fp, _z_abi(callers_sp), Z_SP); // Restore frame pointer. 660 __ z_lg(sp_before_i2c_extension, Address(Z_fp, _z_ijava_state_neg(top_frame_sp))); 661 __ resize_frame_absolute(sp_before_i2c_extension, Z_locals/*tmp*/, true/*load_fp*/); 662 663 // TODO(ZASM): necessary?? 664 // // and NULL it as marker that esp is now tos until next java call 665 // __ movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD); 666 667 __ restore_bcp(); 668 __ restore_locals(); 669 __ restore_esp(); 670 671 if (state == atos) { | 625 Z_ARG2, Z_tos /*object (see TT::aastore())*/); 626 } else { 627 if (message != NULL) { 628 __ load_absolute_address(Z_ARG3, (address)message); 629 } else { 630 __ clear_reg(Z_ARG3, true, false); 631 } 632 __ call_VM(Z_tos, 633 CAST_FROM_FN_PTR(address, InterpreterRuntime::create_exception), 634 Z_ARG2, Z_ARG3); 635 } 636 // Throw exception. 637 __ load_absolute_address(Z_R1_scratch, Interpreter::throw_exception_entry()); 638 __ z_br(Z_R1_scratch); 639 640 BLOCK_COMMENT("} exception_handler_common"); 641 642 return entry; 643 } 644 645 address TemplateInterpreterGenerator::generate_return_entry_for (TosState state, int step, size_t index_size) { 646 address entry = __ pc(); 647 648 BLOCK_COMMENT("return_entry {"); 649 650 // Pop i2c extension or revert top-2-parent-resize done by interpreted callees. 651 Register sp_before_i2c_extension = Z_bcp; 652 __ z_lg(Z_fp, _z_abi(callers_sp), Z_SP); // Restore frame pointer. 653 __ z_lg(sp_before_i2c_extension, Address(Z_fp, _z_ijava_state_neg(top_frame_sp))); 654 __ resize_frame_absolute(sp_before_i2c_extension, Z_locals/*tmp*/, true/*load_fp*/); 655 656 // TODO(ZASM): necessary?? 657 // // and NULL it as marker that esp is now tos until next java call 658 // __ movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD); 659 660 __ restore_bcp(); 661 __ restore_locals(); 662 __ restore_esp(); 663 664 if (state == atos) { |