< prev index next >

src/share/vm/c1/c1_LIRGenerator.cpp

Print this page
rev 7807 : [mq]: bcast

*** 1580,1592 **** #endif // INCLUDE_ALL_GCS //////////////////////////////////////////////////////////////////////// void LIRGenerator::CardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val) { ! ! assert(sizeof(*((CardTableModRefBS*)_bs)->byte_map_base) == sizeof(jbyte), "adjust this code"); ! LIR_Const* card_table_base = new LIR_Const(((CardTableModRefBS*)_bs)->byte_map_base); if (addr->is_address()) { LIR_Address* address = addr->as_address_ptr(); // ptr cannot be an object because we use this barrier for array card marks // and addr can point in the middle of an array. LIR_Opr ptr = new_pointer_register(); --- 1580,1592 ---- #endif // INCLUDE_ALL_GCS //////////////////////////////////////////////////////////////////////// void LIRGenerator::CardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val) { ! CardTableModRefBS* ct = barrier_set_cast<CardTableModRefBS>(_bs); ! assert(sizeof(*(ct->byte_map_base)) == sizeof(jbyte), "adjust this code"); ! LIR_Const* card_table_base = new LIR_Const(ct->byte_map_base); if (addr->is_address()) { LIR_Address* address = addr->as_address_ptr(); // ptr cannot be an object because we use this barrier for array card marks // and addr can point in the middle of an array. LIR_Opr ptr = new_pointer_register();
*** 1607,1617 **** __ move((LIR_Opr)card_table_base, tmp); } else { __ move(new LIR_Address(FrameMap::Rthread_opr, in_bytes(JavaThread::card_table_base_offset()), T_ADDRESS), tmp); } - CardTableModRefBS* ct = (CardTableModRefBS*)_bs; LIR_Address *card_addr = new LIR_Address(tmp, addr, (LIR_Address::Scale) -CardTableModRefBS::card_shift, 0, T_BYTE); if(((int)ct->byte_map_base & 0xff) == 0) { __ move(tmp, card_addr); } else { LIR_Opr tmp_zero = new_register(T_INT); --- 1607,1616 ----
< prev index next >