221 PcDesc* pc_desc_near(address pc) { return find_pc_desc(pc, true); }
222
223 // ScopeDesc for an instruction
224 ScopeDesc* scope_desc_at(address pc);
225 ScopeDesc* scope_desc_near(address pc);
226
227 bool is_at_poll_return(address pc);
228 bool is_at_poll_or_poll_return(address pc);
229
230 bool is_marked_for_deoptimization() const { return _mark_for_deoptimization_status != not_marked; }
231 void mark_for_deoptimization(bool inc_recompile_counts = true) {
232 _mark_for_deoptimization_status = (inc_recompile_counts ? deoptimize : deoptimize_noupdate);
233 }
234 bool update_recompile_counts() const {
235 // Update recompile counts when either the update is explicitly requested (deoptimize)
236 // or the nmethod is not marked for deoptimization at all (not_marked).
237 // The latter happens during uncommon traps when deoptimized nmethod is made not entrant.
238 return _mark_for_deoptimization_status != deoptimize_noupdate;
239 }
240
241 static bool nmethod_access_is_safe(nmethod* nm);
242
243 // tells whether frames described by this nmethod can be deoptimized
244 // note: native wrappers cannot be deoptimized.
245 bool can_be_deoptimized() const { return is_java_method(); }
246
247 virtual oop oop_at(int index) const = 0;
248 virtual Metadata* metadata_at(int index) const = 0;
249
250 address scopes_data_begin() const { return _scopes_data_begin; }
251 virtual address scopes_data_end() const = 0;
252 int scopes_data_size() const { return scopes_data_end() - scopes_data_begin(); }
253
254 virtual PcDesc* scopes_pcs_begin() const = 0;
255 virtual PcDesc* scopes_pcs_end() const = 0;
256 int scopes_pcs_size() const { return (intptr_t) scopes_pcs_end() - (intptr_t) scopes_pcs_begin(); }
257
258 address insts_begin() const { return code_begin(); }
259 address insts_end() const { return stub_begin(); }
260 // Returns true if a given address is in the 'insts' section. The method
261 // insts_contains_inclusive() is end-inclusive.
262 bool insts_contains(address addr) const { return insts_begin() <= addr && addr < insts_end(); }
|
221 PcDesc* pc_desc_near(address pc) { return find_pc_desc(pc, true); }
222
223 // ScopeDesc for an instruction
224 ScopeDesc* scope_desc_at(address pc);
225 ScopeDesc* scope_desc_near(address pc);
226
227 bool is_at_poll_return(address pc);
228 bool is_at_poll_or_poll_return(address pc);
229
230 bool is_marked_for_deoptimization() const { return _mark_for_deoptimization_status != not_marked; }
231 void mark_for_deoptimization(bool inc_recompile_counts = true) {
232 _mark_for_deoptimization_status = (inc_recompile_counts ? deoptimize : deoptimize_noupdate);
233 }
234 bool update_recompile_counts() const {
235 // Update recompile counts when either the update is explicitly requested (deoptimize)
236 // or the nmethod is not marked for deoptimization at all (not_marked).
237 // The latter happens during uncommon traps when deoptimized nmethod is made not entrant.
238 return _mark_for_deoptimization_status != deoptimize_noupdate;
239 }
240
241 // tells whether frames described by this nmethod can be deoptimized
242 // note: native wrappers cannot be deoptimized.
243 bool can_be_deoptimized() const { return is_java_method(); }
244
245 virtual oop oop_at(int index) const = 0;
246 virtual Metadata* metadata_at(int index) const = 0;
247
248 address scopes_data_begin() const { return _scopes_data_begin; }
249 virtual address scopes_data_end() const = 0;
250 int scopes_data_size() const { return scopes_data_end() - scopes_data_begin(); }
251
252 virtual PcDesc* scopes_pcs_begin() const = 0;
253 virtual PcDesc* scopes_pcs_end() const = 0;
254 int scopes_pcs_size() const { return (intptr_t) scopes_pcs_end() - (intptr_t) scopes_pcs_begin(); }
255
256 address insts_begin() const { return code_begin(); }
257 address insts_end() const { return stub_begin(); }
258 // Returns true if a given address is in the 'insts' section. The method
259 // insts_contains_inclusive() is end-inclusive.
260 bool insts_contains(address addr) const { return insts_begin() <= addr && addr < insts_end(); }
|