745 __ set_info("dtrace_object_alloc", dont_gc_arguments);
746 // we can't gc here so skip the oopmap but make sure that all
747 // the live registers get saved.
748 save_live_registers(sasm);
749
750 __ save_thread(L7_thread_cache);
751 __ call(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_object_alloc),
752 relocInfo::runtime_call_type);
753 __ delayed()->mov(I0, O0);
754 __ restore_thread(L7_thread_cache);
755
756 restore_live_registers(sasm);
757 __ ret();
758 __ delayed()->restore();
759 }
760 break;
761
762 #if INCLUDE_ALL_GCS
763 case g1_pre_barrier_slow_id:
764 { // G4: previous value of memory
765 BarrierSet* bs = Universe::heap()->barrier_set();
766 if (bs->kind() != BarrierSet::G1BarrierSet) {
767 __ save_frame(0);
768 __ set((int)id, O1);
769 __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), I0);
770 __ should_not_reach_here();
771 break;
772 }
773
774 __ set_info("g1_pre_barrier_slow_id", dont_gc_arguments);
775
776 Register pre_val = G4;
777 Register tmp = G1_scratch;
778 Register tmp2 = G3_scratch;
779
780 Label refill, restart;
781 int satb_q_active_byte_offset = in_bytes(G1ThreadLocalData::satb_mark_queue_active_offset());
782 int satb_q_index_byte_offset = in_bytes(G1ThreadLocalData::satb_mark_queue_index_offset());
783 int satb_q_buf_byte_offset = in_bytes(G1ThreadLocalData::satb_mark_queue_buffer_offset());
784
785 // Is marking still active?
810 __ delayed()->st_ptr(tmp, G2_thread, satb_q_index_byte_offset);
811
812 __ bind(refill);
813
814 save_live_registers(sasm);
815
816 __ call_VM_leaf(L7_thread_cache,
817 CAST_FROM_FN_PTR(address,
818 SATBMarkQueueSet::handle_zero_index_for_thread),
819 G2_thread);
820
821 restore_live_registers(sasm);
822
823 __ br(Assembler::always, /*annul*/false, Assembler::pt, restart);
824 __ delayed()->restore();
825 }
826 break;
827
828 case g1_post_barrier_slow_id:
829 {
830 BarrierSet* bs = Universe::heap()->barrier_set();
831 if (bs->kind() != BarrierSet::G1BarrierSet) {
832 __ save_frame(0);
833 __ set((int)id, O1);
834 __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), I0);
835 __ should_not_reach_here();
836 break;
837 }
838
839 __ set_info("g1_post_barrier_slow_id", dont_gc_arguments);
840
841 Register addr = G4;
842 Register cardtable = G5;
843 Register tmp = G1_scratch;
844 Register tmp2 = G3_scratch;
845 jbyte* byte_map_base = ci_card_table_address();
846
847 Label not_already_dirty, restart, refill, young_card;
848
849 __ srlx(addr, CardTable::card_shift, addr);
850
|
745 __ set_info("dtrace_object_alloc", dont_gc_arguments);
746 // we can't gc here so skip the oopmap but make sure that all
747 // the live registers get saved.
748 save_live_registers(sasm);
749
750 __ save_thread(L7_thread_cache);
751 __ call(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_object_alloc),
752 relocInfo::runtime_call_type);
753 __ delayed()->mov(I0, O0);
754 __ restore_thread(L7_thread_cache);
755
756 restore_live_registers(sasm);
757 __ ret();
758 __ delayed()->restore();
759 }
760 break;
761
762 #if INCLUDE_ALL_GCS
763 case g1_pre_barrier_slow_id:
764 { // G4: previous value of memory
765 BarrierSet* bs = BarrierSet::barrier_set();
766 if (bs->kind() != BarrierSet::G1BarrierSet) {
767 __ save_frame(0);
768 __ set((int)id, O1);
769 __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), I0);
770 __ should_not_reach_here();
771 break;
772 }
773
774 __ set_info("g1_pre_barrier_slow_id", dont_gc_arguments);
775
776 Register pre_val = G4;
777 Register tmp = G1_scratch;
778 Register tmp2 = G3_scratch;
779
780 Label refill, restart;
781 int satb_q_active_byte_offset = in_bytes(G1ThreadLocalData::satb_mark_queue_active_offset());
782 int satb_q_index_byte_offset = in_bytes(G1ThreadLocalData::satb_mark_queue_index_offset());
783 int satb_q_buf_byte_offset = in_bytes(G1ThreadLocalData::satb_mark_queue_buffer_offset());
784
785 // Is marking still active?
810 __ delayed()->st_ptr(tmp, G2_thread, satb_q_index_byte_offset);
811
812 __ bind(refill);
813
814 save_live_registers(sasm);
815
816 __ call_VM_leaf(L7_thread_cache,
817 CAST_FROM_FN_PTR(address,
818 SATBMarkQueueSet::handle_zero_index_for_thread),
819 G2_thread);
820
821 restore_live_registers(sasm);
822
823 __ br(Assembler::always, /*annul*/false, Assembler::pt, restart);
824 __ delayed()->restore();
825 }
826 break;
827
828 case g1_post_barrier_slow_id:
829 {
830 BarrierSet* bs = BarrierSet::barrier_set();
831 if (bs->kind() != BarrierSet::G1BarrierSet) {
832 __ save_frame(0);
833 __ set((int)id, O1);
834 __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), I0);
835 __ should_not_reach_here();
836 break;
837 }
838
839 __ set_info("g1_post_barrier_slow_id", dont_gc_arguments);
840
841 Register addr = G4;
842 Register cardtable = G5;
843 Register tmp = G1_scratch;
844 Register tmp2 = G3_scratch;
845 jbyte* byte_map_base = ci_card_table_address();
846
847 Label not_already_dirty, restart, refill, young_card;
848
849 __ srlx(addr, CardTable::card_shift, addr);
850
|