< prev index next >

src/cpu/x86/vm/stubGenerator_x86_32.cpp

Print this page
rev 12906 : [mq]: gc_interface


 711       case BarrierSet::G1SATBCTLogging:
 712         {
 713           __ pusha();                      // push registers
 714           __ call_VM_leaf(CAST_FROM_FN_PTR(address, BarrierSet::static_write_ref_array_post),
 715                           start, count);
 716           __ popa();
 717         }
 718         break;
 719 
 720       case BarrierSet::CardTableForRS:
 721       case BarrierSet::CardTableExtension:
 722         {
 723           CardTableModRefBS* ct = barrier_set_cast<CardTableModRefBS>(bs);
 724           assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code");
 725 
 726           Label L_loop;
 727           const Register end = count;  // elements count; end == start+count-1
 728           assert_different_registers(start, end);
 729 
 730           __ lea(end,  Address(start, count, Address::times_ptr, -wordSize));
 731           __ shrptr(start, CardTableModRefBS::card_shift);
 732           __ shrptr(end,   CardTableModRefBS::card_shift);
 733           __ subptr(end, start); // end --> count
 734         __ BIND(L_loop);
 735           intptr_t disp = (intptr_t) ct->byte_map_base;
 736           Address cardtable(start, count, Address::times_1, disp);
 737           __ movb(cardtable, 0);
 738           __ decrement(count);
 739           __ jcc(Assembler::greaterEqual, L_loop);
 740         }
 741         break;
 742       case BarrierSet::ModRef:
 743         break;
 744       default      :
 745         ShouldNotReachHere();
 746 
 747     }
 748   }
 749 
 750 
 751   // Copy 64 bytes chunks
 752   //




 711       case BarrierSet::G1SATBCTLogging:
 712         {
 713           __ pusha();                      // push registers
 714           __ call_VM_leaf(CAST_FROM_FN_PTR(address, BarrierSet::static_write_ref_array_post),
 715                           start, count);
 716           __ popa();
 717         }
 718         break;
 719 
 720       case BarrierSet::CardTableForRS:
 721       case BarrierSet::CardTableExtension:
 722         {
 723           CardTableModRefBS* ct = barrier_set_cast<CardTableModRefBS>(bs);
 724           assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code");
 725 
 726           Label L_loop;
 727           const Register end = count;  // elements count; end == start+count-1
 728           assert_different_registers(start, end);
 729 
 730           __ lea(end,  Address(start, count, Address::times_ptr, -wordSize));
 731           __ shrptr(start, CardTable::card_shift);
 732           __ shrptr(end,   CardTable::card_shift);
 733           __ subptr(end, start); // end --> count
 734         __ BIND(L_loop);
 735           intptr_t disp = (intptr_t) ct->byte_map_base;
 736           Address cardtable(start, count, Address::times_1, disp);
 737           __ movb(cardtable, 0);
 738           __ decrement(count);
 739           __ jcc(Assembler::greaterEqual, L_loop);
 740         }
 741         break;
 742       case BarrierSet::ModRef:
 743         break;
 744       default      :
 745         ShouldNotReachHere();
 746 
 747     }
 748   }
 749 
 750 
 751   // Copy 64 bytes chunks
 752   //


< prev index next >