367 |
367 |
368 if (new_val == G0) return; |
368 if (new_val == G0) return; |
369 |
369 |
370 G1BarrierSet* bs = barrier_set_cast<G1BarrierSet>(BarrierSet::barrier_set()); |
370 G1BarrierSet* bs = barrier_set_cast<G1BarrierSet>(BarrierSet::barrier_set()); |
371 |
371 |
372 if (G1RSBarrierRegionFilter) { |
372 __ xor3(store_addr, new_val, tmp); |
373 __ xor3(store_addr, new_val, tmp); |
373 __ srlx(tmp, HeapRegion::LogOfHRGrainBytes, tmp); |
374 __ srlx(tmp, HeapRegion::LogOfHRGrainBytes, tmp); |
374 |
375 |
375 __ cmp_and_brx_short(tmp, G0, Assembler::equal, Assembler::pt, filtered); |
376 __ cmp_and_brx_short(tmp, G0, Assembler::equal, Assembler::pt, filtered); |
|
377 } |
|
378 |
376 |
379 // If the "store_addr" register is an "in" or "local" register, move it to |
377 // If the "store_addr" register is an "in" or "local" register, move it to |
380 // a scratch reg so we can pass it as an argument. |
378 // a scratch reg so we can pass it as an argument. |
381 bool use_scr = !(store_addr->is_global() || store_addr->is_out()); |
379 bool use_scr = !(store_addr->is_global() || store_addr->is_out()); |
382 // Pick a scratch register different from "tmp". |
380 // Pick a scratch register different from "tmp". |