228 virtual bool is_osr_method() const = 0;
229 virtual int osr_entry_bci() const = 0;
230 Method* method() const { return _method; }
231 virtual void print_pcs() = 0;
232 bool is_native_method() const { return _method != NULL && _method->is_native(); }
233 bool is_java_method() const { return _method != NULL && !_method->is_native(); }
234
235 // ScopeDesc retrieval operation
236 PcDesc* pc_desc_at(address pc) { return find_pc_desc(pc, false); }
237 // pc_desc_near returns the first PcDesc at or after the given pc.
238 PcDesc* pc_desc_near(address pc) { return find_pc_desc(pc, true); }
239
240 // ScopeDesc for an instruction
241 ScopeDesc* scope_desc_at(address pc);
242 ScopeDesc* scope_desc_near(address pc);
243
244 bool is_at_poll_return(address pc);
245 bool is_at_poll_or_poll_return(address pc);
246
247 bool is_marked_for_deoptimization() const { return _mark_for_deoptimization_status != not_marked; }
248 void mark_for_deoptimization(bool inc_recompile_counts = true) {
249 _mark_for_deoptimization_status = (inc_recompile_counts ? deoptimize : deoptimize_noupdate);
250 }
251 bool update_recompile_counts() const {
252 // Update recompile counts when either the update is explicitly requested (deoptimize)
253 // or the nmethod is not marked for deoptimization at all (not_marked).
254 // The latter happens during uncommon traps when deoptimized nmethod is made not entrant.
255 return _mark_for_deoptimization_status != deoptimize_noupdate;
256 }
257
258 static bool nmethod_access_is_safe(nmethod* nm);
259
260 // tells whether frames described by this nmethod can be deoptimized
261 // note: native wrappers cannot be deoptimized.
262 bool can_be_deoptimized() const { return is_java_method(); }
263
264 virtual oop oop_at(int index) const = 0;
265 virtual Metadata* metadata_at(int index) const = 0;
266
267 address scopes_data_begin() const { return _scopes_data_begin; }
268 virtual address scopes_data_end() const = 0;
269 int scopes_data_size() const { return scopes_data_end() - scopes_data_begin(); }
270
|
228 virtual bool is_osr_method() const = 0;
229 virtual int osr_entry_bci() const = 0;
230 Method* method() const { return _method; }
231 virtual void print_pcs() = 0;
232 bool is_native_method() const { return _method != NULL && _method->is_native(); }
233 bool is_java_method() const { return _method != NULL && !_method->is_native(); }
234
235 // ScopeDesc retrieval operation
236 PcDesc* pc_desc_at(address pc) { return find_pc_desc(pc, false); }
237 // pc_desc_near returns the first PcDesc at or after the given pc.
238 PcDesc* pc_desc_near(address pc) { return find_pc_desc(pc, true); }
239
240 // ScopeDesc for an instruction
241 ScopeDesc* scope_desc_at(address pc);
242 ScopeDesc* scope_desc_near(address pc);
243
244 bool is_at_poll_return(address pc);
245 bool is_at_poll_or_poll_return(address pc);
246
247 bool is_marked_for_deoptimization() const { return _mark_for_deoptimization_status != not_marked; }
248 void mark_for_deoptimization(bool inc_recompile_counts = true);
249
250 bool update_recompile_counts() const {
251 // Update recompile counts when either the update is explicitly requested (deoptimize)
252 // or the nmethod is not marked for deoptimization at all (not_marked).
253 // The latter happens during uncommon traps when deoptimized nmethod is made not entrant.
254 return _mark_for_deoptimization_status != deoptimize_noupdate;
255 }
256
257 static bool nmethod_access_is_safe(nmethod* nm);
258
259 // tells whether frames described by this nmethod can be deoptimized
260 // note: native wrappers cannot be deoptimized.
261 bool can_be_deoptimized() const { return is_java_method(); }
262
263 virtual oop oop_at(int index) const = 0;
264 virtual Metadata* metadata_at(int index) const = 0;
265
266 address scopes_data_begin() const { return _scopes_data_begin; }
267 virtual address scopes_data_end() const = 0;
268 int scopes_data_size() const { return scopes_data_end() - scopes_data_begin(); }
269
|