src/cpu/sparc/vm/templateTable_sparc.cpp

Print this page

        

*** 60,69 **** --- 60,76 ---- // Load and record the previous value. __ g1_write_barrier_pre(base, index, offset, noreg /* pre_val */, tmp, true /*preserve_o_regs*/); + // G1 barrier needs uncompressed oop for region cross check. + Register new_val = val; + if (UseCompressedOops && val != G0) { + new_val = tmp; + __ mov(val, new_val); + } + if (index == noreg ) { assert(Assembler::is_simm13(offset), "fix this code"); __ store_heap_oop(val, base, offset); } else { __ store_heap_oop(val, base, index);
*** 76,86 **** __ add(base, offset, base); } else { __ add(base, index, base); } } ! __ g1_write_barrier_post(base, val, tmp); } } break; #endif // SERIALGC case BarrierSet::CardTableModRef: --- 83,93 ---- __ add(base, offset, base); } else { __ add(base, index, base); } } ! __ g1_write_barrier_post(base, new_val, tmp); } } break; #endif // SERIALGC case BarrierSet::CardTableModRef: