< prev index next >

src/share/vm/c1/c1_LIRAssembler.cpp

Print this page

        

*** 119,129 **** , _masm(c->masm()) , _bs(Universe::heap()->barrier_set()) , _frame_map(c->frame_map()) , _current_block(NULL) , _pending_non_safepoint(NULL) ! , _pending_non_safepoint_offset(0) { _slow_case_stubs = new CodeStubList(); } --- 119,130 ---- , _masm(c->masm()) , _bs(Universe::heap()->barrier_set()) , _frame_map(c->frame_map()) , _current_block(NULL) , _pending_non_safepoint(NULL) ! , _pending_non_safepoint_begin_offset(0) ! , _pending_non_safepoint_end_offset(0) { _slow_case_stubs = new CodeStubList(); }
*** 363,392 **** void LIR_Assembler::process_debug_info(LIR_Op* op) { Instruction* src = op->source(); if (src == NULL) return; int pc_offset = code_offset(); if (_pending_non_safepoint == src) { ! _pending_non_safepoint_offset = pc_offset; return; } ValueStack* vstack = debug_info(src); if (vstack == NULL) return; if (_pending_non_safepoint != NULL) { // Got some old debug info. Get rid of it. if (debug_info(_pending_non_safepoint) == vstack) { ! _pending_non_safepoint_offset = pc_offset; return; } ! if (_pending_non_safepoint_offset < pc_offset) { record_non_safepoint_debug_info(); } _pending_non_safepoint = NULL; } // Remember the debug info. if (pc_offset > compilation()->debug_info_recorder()->last_pc_offset()) { _pending_non_safepoint = src; ! _pending_non_safepoint_offset = pc_offset; } } // Index caller states in s, where 0 is the oldest, 1 its callee, etc. // Return NULL if n is too large. --- 364,397 ---- void LIR_Assembler::process_debug_info(LIR_Op* op) { Instruction* src = op->source(); if (src == NULL) return; int pc_offset = code_offset(); if (_pending_non_safepoint == src) { ! _pending_non_safepoint_end_offset = pc_offset; return; } ValueStack* vstack = debug_info(src); if (vstack == NULL) return; if (_pending_non_safepoint != NULL) { // Got some old debug info. Get rid of it. if (debug_info(_pending_non_safepoint) == vstack) { ! _pending_non_safepoint_end_offset = pc_offset; return; } ! if (_pending_non_safepoint_end_offset < pc_offset) { ! record_non_safepoint_debug_info(); ! } else if (_pending_non_safepoint_begin_offset < pc_offset) { ! _pending_non_safepoint_end_offset = pc_offset - 1; record_non_safepoint_debug_info(); } _pending_non_safepoint = NULL; } // Remember the debug info. if (pc_offset > compilation()->debug_info_recorder()->last_pc_offset()) { _pending_non_safepoint = src; ! _pending_non_safepoint_begin_offset = pc_offset; ! _pending_non_safepoint_end_offset = pc_offset; } } // Index caller states in s, where 0 is the oldest, 1 its callee, etc. // Return NULL if n is too large.
*** 406,416 **** s = s->caller_state(); } } void LIR_Assembler::record_non_safepoint_debug_info() { ! int pc_offset = _pending_non_safepoint_offset; ValueStack* vstack = debug_info(_pending_non_safepoint); int bci = vstack->bci(); DebugInformationRecorder* debug_info = compilation()->debug_info_recorder(); assert(debug_info->recording_non_safepoints(), "sanity"); --- 411,421 ---- s = s->caller_state(); } } void LIR_Assembler::record_non_safepoint_debug_info() { ! int pc_offset = _pending_non_safepoint_end_offset; ValueStack* vstack = debug_info(_pending_non_safepoint); int bci = vstack->bci(); DebugInformationRecorder* debug_info = compilation()->debug_info_recorder(); assert(debug_info->recording_non_safepoints(), "sanity");
*** 447,456 **** --- 452,466 ---- void LIR_Assembler::add_debug_info_for_div0(int pc_offset, CodeEmitInfo* cinfo) { DivByZeroStub* stub = new DivByZeroStub(pc_offset, cinfo); append_code_stub(stub); } + void LIR_Assembler::add_non_safepoint_debug_info_here(CodeEmitInfo* info) { + flush_debug_info(code_offset()); + info->record_non_safepoint_debug_info(compilation()->debug_info_recorder(), code_offset()); + } + void LIR_Assembler::emit_rtcall(LIR_OpRTCall* op) { rt_call(op->result_opr(), op->addr(), op->arguments(), op->tmp(), op->info()); }
< prev index next >