src/cpu/sparc/vm/c1_Runtime1_sparc.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6930772 Sdiff src/cpu/sparc/vm

src/cpu/sparc/vm/c1_Runtime1_sparc.cpp

Print this page




 662         oop_maps = new OopMapSet();
 663         OopMap* oop_map = save_live_registers(sasm);
 664         __ mov(Oexception->after_save(),  Oexception);
 665         __ mov(Oissuing_pc->after_save(), Oissuing_pc);
 666         generate_handle_exception(sasm, oop_maps, oop_map);
 667       }
 668       break;
 669 
 670     case unwind_exception_id:
 671       {
 672         // O0: exception
 673         // I7: address of call to this method
 674 
 675         __ set_info("unwind_exception", dont_gc_arguments);
 676         __ mov(Oexception, Oexception->after_save());
 677         __ add(I7, frame::pc_return_offset, Oissuing_pc->after_save());
 678 
 679         __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address),
 680                         G2_thread, Oissuing_pc->after_save());
 681         __ verify_not_null_oop(Oexception->after_save());
 682         __ jmp(O0, 0);
 683         __ delayed()->restore();







 684       }
 685       break;
 686 
 687     case throw_array_store_exception_id:
 688       {
 689         __ set_info("throw_array_store_exception", dont_gc_arguments);
 690         oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_array_store_exception), false);
 691       }
 692       break;
 693 
 694     case throw_class_cast_exception_id:
 695       {
 696         // G4: object
 697         __ set_info("throw_class_cast_exception", dont_gc_arguments);
 698         oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_class_cast_exception), true);
 699       }
 700       break;
 701 
 702     case throw_incompatible_class_change_error_id:
 703       {




 662         oop_maps = new OopMapSet();
 663         OopMap* oop_map = save_live_registers(sasm);
 664         __ mov(Oexception->after_save(),  Oexception);
 665         __ mov(Oissuing_pc->after_save(), Oissuing_pc);
 666         generate_handle_exception(sasm, oop_maps, oop_map);
 667       }
 668       break;
 669 
 670     case unwind_exception_id:
 671       {
 672         // O0: exception
 673         // I7: address of call to this method
 674 
 675         __ set_info("unwind_exception", dont_gc_arguments);
 676         __ mov(Oexception, Oexception->after_save());
 677         __ add(I7, frame::pc_return_offset, Oissuing_pc->after_save());
 678 
 679         __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address),
 680                         G2_thread, Oissuing_pc->after_save());
 681         __ verify_not_null_oop(Oexception->after_save());
 682 
 683         // Restore SP from L7 if the exception PC is a MethodHandle call site.
 684         __ mov(O0, G5);  // Save the target address.
 685         __ lduw(Address(G2_thread, JavaThread::is_method_handle_return_offset()), L0);
 686         __ tst(L0);  // Condition codes are preserved over the restore.
 687         __ restore();
 688 
 689         __ jmp(G5, 0);
 690         __ delayed()->movcc(Assembler::notZero, false, Assembler::icc, L7, SP);  // Restore SP if required.
 691       }
 692       break;
 693 
 694     case throw_array_store_exception_id:
 695       {
 696         __ set_info("throw_array_store_exception", dont_gc_arguments);
 697         oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_array_store_exception), false);
 698       }
 699       break;
 700 
 701     case throw_class_cast_exception_id:
 702       {
 703         // G4: object
 704         __ set_info("throw_class_cast_exception", dont_gc_arguments);
 705         oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_class_cast_exception), true);
 706       }
 707       break;
 708 
 709     case throw_incompatible_class_change_error_id:
 710       {


src/cpu/sparc/vm/c1_Runtime1_sparc.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File