470 // load the original value of the card |
470 // load the original value of the card |
471 Node* card_val = __ load(__ ctrl(), card_adr, TypeInt::INT, T_BYTE, Compile::AliasIdxRaw); |
471 Node* card_val = __ load(__ ctrl(), card_adr, TypeInt::INT, T_BYTE, Compile::AliasIdxRaw); |
472 |
472 |
473 __ if_then(card_val, BoolTest::ne, young_card); { |
473 __ if_then(card_val, BoolTest::ne, young_card); { |
474 kit->sync_kit(ideal); |
474 kit->sync_kit(ideal); |
475 kit->insert_store_load_for_barrier(); |
475 kit->insert_mem_bar(Op_MemBarVolatile, oop_store); |
476 __ sync_kit(kit); |
476 __ sync_kit(kit); |
477 |
477 |
478 Node* card_val_reload = __ load(__ ctrl(), card_adr, TypeInt::INT, T_BYTE, Compile::AliasIdxRaw); |
478 Node* card_val_reload = __ load(__ ctrl(), card_adr, TypeInt::INT, T_BYTE, Compile::AliasIdxRaw); |
479 __ if_then(card_val_reload, BoolTest::ne, dirty_card); { |
479 __ if_then(card_val_reload, BoolTest::ne, dirty_card); { |
480 g1_mark_card(kit, ideal, card_adr, oop_store, alias_idx, index, index_adr, buffer, tf); |
480 g1_mark_card(kit, ideal, card_adr, oop_store, alias_idx, index, index_adr, buffer, tf); |