< prev index next >

src/hotspot/cpu/ppc/c1_Runtime1_ppc.cpp

Print this page




 694         __ set_info("dtrace_object_alloc", dont_gc_arguments);
 695 //        // We can't gc here so skip the oopmap but make sure that all
 696 //        // the live registers get saved.
 697 //        save_live_registers(sasm);
 698 //
 699 //        __ save_thread(L7_thread_cache);
 700 //        __ call(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_object_alloc),
 701 //                relocInfo::runtime_call_type);
 702 //        __ delayed()->mov(I0, O0);
 703 //        __ restore_thread(L7_thread_cache);
 704 //
 705 //        restore_live_registers(sasm);
 706 //        __ ret();
 707 //        __ delayed()->restore();
 708       }
 709       break;
 710 
 711 #if INCLUDE_ALL_GCS
 712     case g1_pre_barrier_slow_id:
 713       {
 714         BarrierSet* bs = Universe::heap()->barrier_set();
 715         if (bs->kind() != BarrierSet::G1BarrierSet) {
 716           goto unimplemented_entry;
 717         }
 718 
 719         __ set_info("g1_pre_barrier_slow_id", dont_gc_arguments);
 720 
 721         // Using stack slots: pre_val (pre-pushed), spill tmp, spill tmp2.
 722         const int stack_slots = 3;
 723         Register pre_val = R0; // previous value of memory
 724         Register tmp  = R14;
 725         Register tmp2 = R15;
 726 
 727         Label refill, restart, marking_not_active;
 728         int satb_q_active_byte_offset = in_bytes(G1ThreadLocalData::satb_mark_queue_active_offset());
 729         int satb_q_index_byte_offset = in_bytes(G1ThreadLocalData::satb_mark_queue_index_offset());
 730         int satb_q_buf_byte_offset = in_bytes(G1ThreadLocalData::satb_mark_queue_buffer_offset());
 731 
 732         // Spill
 733         __ std(tmp, -16, R1_SP);
 734         __ std(tmp2, -24, R1_SP);


 765         __ ld(tmp, -16, R1_SP);
 766         __ blr();
 767 
 768         __ bind(refill);
 769         const int nbytes_save = (MacroAssembler::num_volatile_regs + stack_slots) * BytesPerWord;
 770         __ save_volatile_gprs(R1_SP, -nbytes_save); // except R0
 771         __ mflr(R0);
 772         __ std(R0, _abi(lr), R1_SP);
 773         __ push_frame_reg_args(nbytes_save, R0); // dummy frame for C call
 774         __ call_VM_leaf(CAST_FROM_FN_PTR(address, SATBMarkQueueSet::handle_zero_index_for_thread), R16_thread);
 775         __ pop_frame();
 776         __ ld(R0, _abi(lr), R1_SP);
 777         __ mtlr(R0);
 778         __ restore_volatile_gprs(R1_SP, -nbytes_save); // except R0
 779         __ b(restart);
 780       }
 781       break;
 782 
 783   case g1_post_barrier_slow_id:
 784     {
 785         BarrierSet* bs = Universe::heap()->barrier_set();
 786         if (bs->kind() != BarrierSet::G1BarrierSet) {
 787           goto unimplemented_entry;
 788         }
 789 
 790         __ set_info("g1_post_barrier_slow_id", dont_gc_arguments);
 791 
 792         // Using stack slots: spill addr, spill tmp2
 793         const int stack_slots = 2;
 794         Register tmp = R0;
 795         Register addr = R14;
 796         Register tmp2 = R15;
 797         jbyte* byte_map_base = ci_card_table_address();
 798 
 799         Label restart, refill, ret;
 800 
 801         // Spill
 802         __ std(addr, -8, R1_SP);
 803         __ std(tmp2, -16, R1_SP);
 804 
 805         __ srdi(addr, R0, CardTable::card_shift); // Addr is passed in R0.




 694         __ set_info("dtrace_object_alloc", dont_gc_arguments);
 695 //        // We can't gc here so skip the oopmap but make sure that all
 696 //        // the live registers get saved.
 697 //        save_live_registers(sasm);
 698 //
 699 //        __ save_thread(L7_thread_cache);
 700 //        __ call(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_object_alloc),
 701 //                relocInfo::runtime_call_type);
 702 //        __ delayed()->mov(I0, O0);
 703 //        __ restore_thread(L7_thread_cache);
 704 //
 705 //        restore_live_registers(sasm);
 706 //        __ ret();
 707 //        __ delayed()->restore();
 708       }
 709       break;
 710 
 711 #if INCLUDE_ALL_GCS
 712     case g1_pre_barrier_slow_id:
 713       {
 714         BarrierSet* bs = BarrierSet::barrier_set();
 715         if (bs->kind() != BarrierSet::G1BarrierSet) {
 716           goto unimplemented_entry;
 717         }
 718 
 719         __ set_info("g1_pre_barrier_slow_id", dont_gc_arguments);
 720 
 721         // Using stack slots: pre_val (pre-pushed), spill tmp, spill tmp2.
 722         const int stack_slots = 3;
 723         Register pre_val = R0; // previous value of memory
 724         Register tmp  = R14;
 725         Register tmp2 = R15;
 726 
 727         Label refill, restart, marking_not_active;
 728         int satb_q_active_byte_offset = in_bytes(G1ThreadLocalData::satb_mark_queue_active_offset());
 729         int satb_q_index_byte_offset = in_bytes(G1ThreadLocalData::satb_mark_queue_index_offset());
 730         int satb_q_buf_byte_offset = in_bytes(G1ThreadLocalData::satb_mark_queue_buffer_offset());
 731 
 732         // Spill
 733         __ std(tmp, -16, R1_SP);
 734         __ std(tmp2, -24, R1_SP);


 765         __ ld(tmp, -16, R1_SP);
 766         __ blr();
 767 
 768         __ bind(refill);
 769         const int nbytes_save = (MacroAssembler::num_volatile_regs + stack_slots) * BytesPerWord;
 770         __ save_volatile_gprs(R1_SP, -nbytes_save); // except R0
 771         __ mflr(R0);
 772         __ std(R0, _abi(lr), R1_SP);
 773         __ push_frame_reg_args(nbytes_save, R0); // dummy frame for C call
 774         __ call_VM_leaf(CAST_FROM_FN_PTR(address, SATBMarkQueueSet::handle_zero_index_for_thread), R16_thread);
 775         __ pop_frame();
 776         __ ld(R0, _abi(lr), R1_SP);
 777         __ mtlr(R0);
 778         __ restore_volatile_gprs(R1_SP, -nbytes_save); // except R0
 779         __ b(restart);
 780       }
 781       break;
 782 
 783   case g1_post_barrier_slow_id:
 784     {
 785         BarrierSet* bs = BarrierSet::barrier_set();
 786         if (bs->kind() != BarrierSet::G1BarrierSet) {
 787           goto unimplemented_entry;
 788         }
 789 
 790         __ set_info("g1_post_barrier_slow_id", dont_gc_arguments);
 791 
 792         // Using stack slots: spill addr, spill tmp2
 793         const int stack_slots = 2;
 794         Register tmp = R0;
 795         Register addr = R14;
 796         Register tmp2 = R15;
 797         jbyte* byte_map_base = ci_card_table_address();
 798 
 799         Label restart, refill, ret;
 800 
 801         // Spill
 802         __ std(addr, -8, R1_SP);
 803         __ std(tmp2, -16, R1_SP);
 804 
 805         __ srdi(addr, R0, CardTable::card_shift); // Addr is passed in R0.


< prev index next >