// --- pre_write_barrier_compiled void C1_MacroAssembler::pre_write_barrier_compiled(RInOuts, Register Rtmp0, Register Rtmp1, RKeepIns, Register Rbase, int off, Register Rindex, int scale, Register Rval, CodeEmitInfo *info) { Label retry, safe_to_store; if (UseSBA) bind(retry); // Come here to retry barrier following an SBA escape // Perform regular pre write barrier pre_write_barrier(RInOuts::a, Rtmp0, Rtmp1, RKeepIns::a, Rbase, off, Rindex, scale, Rval, safe_to_store); if( UseSBA ) { // SBA escape will update Rbase. Rbase may already have been added to the // oop map for patching. Force Rbase into oop map. // NB. this is the last use of the oop map! info->oop_map()->add((VOopReg::VR)Rbase); // Full SBA escape - Rtmp0 holds FID of Rbase // Place args to sba_escape below return address in outgoing stack frame assert0 (-frame::runtime_stub_frame_size + frame::xPAD == -16) st8(RSP, -16, Rval); assert0 (-frame::runtime_stub_frame_size + frame::xRAX == -24) st8(RSP, -24, Rbase); call(StubRoutines::x86::sba_escape_handler()); // Do call assert(info,"oop map expected"); add_oopmap(rel_pc(), info->oop_map()); // Add oop map on return address of call add_dbg(rel_pc(), info->debug_scope()); jmp (retry); } bind(safe_to_store); }
void add_dbg(const std::string &msg) { add_dbg(sim_cur_time(), msg); }