764
765 int save_fpu_registers = (id == monitorexit_id);
766 // make a frame and preserve the caller's caller-save registers
767 OopMap* oop_map = save_live_registers(sasm, save_fpu_registers);
768
769 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, monitorexit), G4);
770
771 oop_maps = new OopMapSet();
772 oop_maps->add_gc_map(call_offset, oop_map);
773 restore_live_registers(sasm, save_fpu_registers);
774
775 __ ret();
776 __ delayed()->restore();
777 }
778 break;
779
780 case deoptimize_id:
781 {
782 __ set_info("deoptimize", dont_gc_arguments);
783 OopMap* oop_map = save_live_registers(sasm);
784 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, deoptimize));
785 oop_maps = new OopMapSet();
786 oop_maps->add_gc_map(call_offset, oop_map);
787 restore_live_registers(sasm);
788 DeoptimizationBlob* deopt_blob = SharedRuntime::deopt_blob();
789 assert(deopt_blob != NULL, "deoptimization blob must have been created");
790 AddressLiteral dest(deopt_blob->unpack_with_reexecution());
791 __ jump_to(dest, O0);
792 __ delayed()->restore();
793 }
794 break;
795
796 case access_field_patching_id:
797 { __ set_info("access_field_patching", dont_gc_arguments);
798 oop_maps = generate_patching(sasm, CAST_FROM_FN_PTR(address, access_field_patching));
799 }
800 break;
801
802 case load_klass_patching_id:
803 { __ set_info("load_klass_patching", dont_gc_arguments);
804 oop_maps = generate_patching(sasm, CAST_FROM_FN_PTR(address, move_klass_patching));
|
764
765 int save_fpu_registers = (id == monitorexit_id);
766 // make a frame and preserve the caller's caller-save registers
767 OopMap* oop_map = save_live_registers(sasm, save_fpu_registers);
768
769 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, monitorexit), G4);
770
771 oop_maps = new OopMapSet();
772 oop_maps->add_gc_map(call_offset, oop_map);
773 restore_live_registers(sasm, save_fpu_registers);
774
775 __ ret();
776 __ delayed()->restore();
777 }
778 break;
779
780 case deoptimize_id:
781 {
782 __ set_info("deoptimize", dont_gc_arguments);
783 OopMap* oop_map = save_live_registers(sasm);
784 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, deoptimize), G4);
785 oop_maps = new OopMapSet();
786 oop_maps->add_gc_map(call_offset, oop_map);
787 restore_live_registers(sasm);
788 DeoptimizationBlob* deopt_blob = SharedRuntime::deopt_blob();
789 assert(deopt_blob != NULL, "deoptimization blob must have been created");
790 AddressLiteral dest(deopt_blob->unpack_with_reexecution());
791 __ jump_to(dest, O0);
792 __ delayed()->restore();
793 }
794 break;
795
796 case access_field_patching_id:
797 { __ set_info("access_field_patching", dont_gc_arguments);
798 oop_maps = generate_patching(sasm, CAST_FROM_FN_PTR(address, access_field_patching));
799 }
800 break;
801
802 case load_klass_patching_id:
803 { __ set_info("load_klass_patching", dont_gc_arguments);
804 oop_maps = generate_patching(sasm, CAST_FROM_FN_PTR(address, move_klass_patching));
|