423 assert(pre_val()->is_register(), "Precondition."); |
423 assert(pre_val()->is_register(), "Precondition."); |
424 |
424 |
425 Register pre_val_reg = pre_val()->as_register(); |
425 Register pre_val_reg = pre_val()->as_register(); |
426 |
426 |
427 ce->mem2reg(addr(), pre_val(), T_OBJECT, patch_code(), info(), false); |
427 ce->mem2reg(addr(), pre_val(), T_OBJECT, patch_code(), info(), false); |
428 __ br_on_reg_cond(Assembler::rc_z, /*annul*/false, Assembler::pt, |
428 if (__ is_in_wdisp16_range(_continuation)) { |
429 pre_val_reg, _continuation); |
429 __ br_on_reg_cond(Assembler::rc_z, /*annul*/false, Assembler::pt, |
|
430 pre_val_reg, _continuation); |
|
431 } else { |
|
432 __ cmp(pre_val_reg, G0); |
|
433 __ brx(Assembler::equal, false, Assembler::pn, _continuation); |
|
434 } |
430 __ delayed()->nop(); |
435 __ delayed()->nop(); |
431 |
436 |
432 __ call(Runtime1::entry_for(Runtime1::Runtime1::g1_pre_barrier_slow_id)); |
437 __ call(Runtime1::entry_for(Runtime1::Runtime1::g1_pre_barrier_slow_id)); |
433 __ delayed()->mov(pre_val_reg, G4); |
438 __ delayed()->mov(pre_val_reg, G4); |
434 __ br(Assembler::always, false, Assembler::pt, _continuation); |
439 __ br(Assembler::always, false, Assembler::pt, _continuation); |
450 |
455 |
451 assert(addr()->is_register(), "Precondition."); |
456 assert(addr()->is_register(), "Precondition."); |
452 assert(new_val()->is_register(), "Precondition."); |
457 assert(new_val()->is_register(), "Precondition."); |
453 Register addr_reg = addr()->as_pointer_register(); |
458 Register addr_reg = addr()->as_pointer_register(); |
454 Register new_val_reg = new_val()->as_register(); |
459 Register new_val_reg = new_val()->as_register(); |
455 __ br_on_reg_cond(Assembler::rc_z, /*annul*/false, Assembler::pt, |
460 if (__ is_in_wdisp16_range(_continuation)) { |
456 new_val_reg, _continuation); |
461 __ br_on_reg_cond(Assembler::rc_z, /*annul*/false, Assembler::pt, |
|
462 new_val_reg, _continuation); |
|
463 } else { |
|
464 __ cmp(new_val_reg, G0); |
|
465 __ brx(Assembler::equal, false, Assembler::pn, _continuation); |
|
466 } |
457 __ delayed()->nop(); |
467 __ delayed()->nop(); |
458 |
468 |
459 __ call(Runtime1::entry_for(Runtime1::Runtime1::g1_post_barrier_slow_id)); |
469 __ call(Runtime1::entry_for(Runtime1::Runtime1::g1_post_barrier_slow_id)); |
460 __ delayed()->mov(addr_reg, G4); |
470 __ delayed()->mov(addr_reg, G4); |
461 __ br(Assembler::always, false, Assembler::pt, _continuation); |
471 __ br(Assembler::always, false, Assembler::pt, _continuation); |