764 oop_maps->add_gc_map(call_offset, oop_map); |
764 oop_maps->add_gc_map(call_offset, oop_map); |
765 restore_live_registers(sasm, save_fpu_registers); |
765 restore_live_registers(sasm, save_fpu_registers); |
766 |
766 |
767 __ ret(); |
767 __ ret(); |
768 __ delayed()->restore(); |
768 __ delayed()->restore(); |
769 |
769 } |
|
770 break; |
|
771 |
|
772 case deoptimize_id: |
|
773 { |
|
774 __ set_info("deoptimize", dont_gc_arguments); |
|
775 OopMap* oop_map = save_live_registers(sasm); |
|
776 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, deoptimize)); |
|
777 oop_maps = new OopMapSet(); |
|
778 oop_maps->add_gc_map(call_offset, oop_map); |
|
779 restore_live_registers(sasm); |
|
780 DeoptimizationBlob* deopt_blob = SharedRuntime::deopt_blob(); |
|
781 assert(deopt_blob != NULL, "deoptimization blob must have been created"); |
|
782 AddressLiteral dest(deopt_blob->unpack_with_reexecution()); |
|
783 __ jump_to(dest, O0); |
|
784 __ delayed()->restore(); |
770 } |
785 } |
771 break; |
786 break; |
772 |
787 |
773 case access_field_patching_id: |
788 case access_field_patching_id: |
774 { __ set_info("access_field_patching", dont_gc_arguments); |
789 { __ set_info("access_field_patching", dont_gc_arguments); |