hotspot/src/cpu/sparc/vm/assembler_sparc.cpp
void MacroAssembler::card_write_barrier_post(Register store_addr, Register new_val, Register tmp) {
{- -------------------------------------------
(1) 書き込まれる値が G0 レジスタ (= 0) であれば,
記録用のコードを生成する必要は無いので, ここでリターン.
---------------------------------------- -}
// If we're writing constant NULL, we can skip the write barrier.
if (new_val == G0) return;
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
CardTableModRefBS* bs = (CardTableModRefBS*) Universe::heap()->barrier_set();
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(bs->kind() == BarrierSet::CardTableModRef ||
bs->kind() == BarrierSet::CardTableExtension, "wrong barrier");
{- -------------------------------------------
(1) コード生成:
「MacroAssembler::card_table_write() が生成するコードにより,
card table 内の該当エントリを dirty 化する.」
---------------------------------------- -}
card_table_write(bs->byte_map_base, tmp, store_addr);
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.