80 // nmethods (native methods) are the compiled code versions of Java methods. |
80 // nmethods (native methods) are the compiled code versions of Java methods. |
81 |
81 |
82 struct nmFlags { |
82 struct nmFlags { |
83 friend class VMStructs; |
83 friend class VMStructs; |
84 unsigned int version:8; // version number (0 = first version) |
84 unsigned int version:8; // version number (0 = first version) |
85 unsigned int level:4; // optimization level |
|
86 unsigned int age:4; // age (in # of sweep steps) |
85 unsigned int age:4; // age (in # of sweep steps) |
87 |
86 |
88 unsigned int state:2; // {alive, zombie, unloaded) |
87 unsigned int state:2; // {alive, zombie, unloaded) |
89 |
88 |
90 unsigned int isUncommonRecompiled:1; // recompiled because of uncommon trap? |
89 unsigned int isUncommonRecompiled:1; // recompiled because of uncommon trap? |
408 |
407 |
409 bool has_dependencies() { return dependencies_size() != 0; } |
408 bool has_dependencies() { return dependencies_size() != 0; } |
410 void flush_dependencies(BoolObjectClosure* is_alive); |
409 void flush_dependencies(BoolObjectClosure* is_alive); |
411 bool has_flushed_dependencies() { return flags.hasFlushedDependencies; } |
410 bool has_flushed_dependencies() { return flags.hasFlushedDependencies; } |
412 void set_has_flushed_dependencies() { |
411 void set_has_flushed_dependencies() { |
413 check_safepoint(); |
|
414 assert(!has_flushed_dependencies(), "should only happen once"); |
412 assert(!has_flushed_dependencies(), "should only happen once"); |
415 flags.hasFlushedDependencies = 1; |
413 flags.hasFlushedDependencies = 1; |
416 } |
414 } |
417 |
415 |
418 bool is_marked_for_reclamation() const { return flags.markedForReclamation; } |
416 bool is_marked_for_reclamation() const { return flags.markedForReclamation; } |
419 void mark_for_reclamation() { check_safepoint(); flags.markedForReclamation = 1; } |
417 void mark_for_reclamation() { flags.markedForReclamation = 1; } |
420 void unmark_for_reclamation() { check_safepoint(); flags.markedForReclamation = 0; } |
418 void unmark_for_reclamation() { flags.markedForReclamation = 0; } |
421 |
419 |
422 bool has_unsafe_access() const { return flags.has_unsafe_access; } |
420 bool has_unsafe_access() const { return flags.has_unsafe_access; } |
423 void set_has_unsafe_access(bool z) { flags.has_unsafe_access = z; } |
421 void set_has_unsafe_access(bool z) { flags.has_unsafe_access = z; } |
424 |
422 |
425 bool has_method_handle_invokes() const { return flags.has_method_handle_invokes; } |
423 bool has_method_handle_invokes() const { return flags.has_method_handle_invokes; } |
426 void set_has_method_handle_invokes(bool z) { flags.has_method_handle_invokes = z; } |
424 void set_has_method_handle_invokes(bool z) { flags.has_method_handle_invokes = z; } |
427 |
425 |
428 bool is_speculatively_disconnected() const { return flags.speculatively_disconnected; } |
426 bool is_speculatively_disconnected() const { return flags.speculatively_disconnected; } |
429 void set_speculatively_disconnected(bool z) { flags.speculatively_disconnected = z; } |
427 void set_speculatively_disconnected(bool z) { flags.speculatively_disconnected = z; } |
430 |
|
431 int level() const { return flags.level; } |
|
432 void set_level(int newLevel) { check_safepoint(); flags.level = newLevel; } |
|
433 |
428 |
434 int comp_level() const { return _comp_level; } |
429 int comp_level() const { return _comp_level; } |
435 |
430 |
436 int version() const { return flags.version; } |
431 int version() const { return flags.version; } |
437 void set_version(int v); |
432 void set_version(int v); |