8199604_cardtablemodrefbs_rename
210 __ add(store_addr, obj.base(), obj.disp());
211 }
212
213 __ g1_write_barrier_pre(store_addr, new_val, tmp1, tmp2, tmp3);
214 if (is_null) {
215 __ store_heap_oop_null(new_val, Address(store_addr));
216 } else {
217 // G1 barrier needs uncompressed oop for region cross check.
218 Register val_to_store = new_val;
219 if (UseCompressedOops) {
220 val_to_store = tmp1;
221 __ mov(val_to_store, new_val);
222 }
223 __ store_heap_oop(val_to_store, Address(store_addr)); // blows val_to_store:
224 val_to_store = noreg;
225 __ g1_write_barrier_post(store_addr, new_val, tmp1, tmp2, tmp3);
226 }
227 }
228 break;
229 #endif // INCLUDE_ALL_GCS
230 case BarrierSet::CardTableModRef:
231 {
232 if (is_null) {
233 __ store_heap_oop_null(new_val, obj);
234 } else {
235 assert (!precise || (obj.index() == noreg && obj.disp() == 0),
236 "store check address should be calculated beforehand");
237
238 __ store_check_part1(tmp1);
239 __ store_heap_oop(new_val, obj); // blows new_val:
240 new_val = noreg;
241 __ store_check_part2(obj.base(), tmp1, tmp2);
242 }
243 }
244 break;
245 case BarrierSet::ModRef:
246 ShouldNotReachHere();
247 break;
248 default:
249 ShouldNotReachHere();
|
210 __ add(store_addr, obj.base(), obj.disp());
211 }
212
213 __ g1_write_barrier_pre(store_addr, new_val, tmp1, tmp2, tmp3);
214 if (is_null) {
215 __ store_heap_oop_null(new_val, Address(store_addr));
216 } else {
217 // G1 barrier needs uncompressed oop for region cross check.
218 Register val_to_store = new_val;
219 if (UseCompressedOops) {
220 val_to_store = tmp1;
221 __ mov(val_to_store, new_val);
222 }
223 __ store_heap_oop(val_to_store, Address(store_addr)); // blows val_to_store:
224 val_to_store = noreg;
225 __ g1_write_barrier_post(store_addr, new_val, tmp1, tmp2, tmp3);
226 }
227 }
228 break;
229 #endif // INCLUDE_ALL_GCS
230 case BarrierSet::CardTableBarrierSet:
231 {
232 if (is_null) {
233 __ store_heap_oop_null(new_val, obj);
234 } else {
235 assert (!precise || (obj.index() == noreg && obj.disp() == 0),
236 "store check address should be calculated beforehand");
237
238 __ store_check_part1(tmp1);
239 __ store_heap_oop(new_val, obj); // blows new_val:
240 new_val = noreg;
241 __ store_check_part2(obj.base(), tmp1, tmp2);
242 }
243 }
244 break;
245 case BarrierSet::ModRef:
246 ShouldNotReachHere();
247 break;
248 default:
249 ShouldNotReachHere();
|