src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File open Cdiff src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.cpp

src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.cpp

Print this page

        

*** 117,127 **** showed that loading of card table base from thread descriptor is 7-18% slower compared to loading of literal embedded into the code. Possible cause is a cache miss (card table base address resides in a rarely accessed area of thread descriptor). */ - // TODO-AARCH64 Investigate if mov_slow is faster than ldr from Rthread on AArch64 __ mov_address(card_table_base, (address)ct->byte_map_base(), symbolic_Relocation::card_table_reference); } // The 2nd part of the store check. void CardTableBarrierSetAssembler::store_check_part2(MacroAssembler* masm, Register obj, Register card_table_base, Register tmp) { --- 117,126 ----
*** 134,149 **** CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(bs); CardTable* ct = ctbs->card_table(); assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "Adjust store check code"); assert(CardTable::dirty_card_val() == 0, "Dirty card value must be 0 due to optimizations."); - #ifdef AARCH64 - add(card_table_base, card_table_base, AsmOperand(obj, lsr, CardTable::card_shift)); - Address card_table_addr(card_table_base); - #else Address card_table_addr(card_table_base, obj, lsr, CardTable::card_shift); - #endif if (UseCondCardMark) { if (ct->scanned_concurrently()) { __ membar(MacroAssembler::Membar_mask_bits(MacroAssembler::StoreLoad), noreg); } --- 133,143 ----
*** 162,174 **** set_card(masm, card_table_base, card_table_addr, tmp); } } void CardTableBarrierSetAssembler::set_card(MacroAssembler* masm, Register card_table_base, Address card_table_addr, Register tmp) { - #ifdef AARCH64 - strb(ZR, card_table_addr); - #else CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(BarrierSet::barrier_set()); CardTable* ct = ctbs->card_table(); if ((((uintptr_t)ct->byte_map_base() & 0xff) == 0)) { // Card table is aligned so the lowest byte of the table address base is zero. // This works only if the code is not saved for later use, possibly --- 156,165 ----
*** 176,182 **** __ strb(card_table_base, card_table_addr); } else { __ mov(tmp, 0); __ strb(tmp, card_table_addr); } - #endif // AARCH64 } --- 167,172 ----
src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File