hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp
changeset 6774 a224d6a24120
parent 6745 a34ef8968a84
child 7397 5b173b4ca846
equal deleted inserted replaced
6773:48d5e03f373f 6774:a224d6a24120
   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);