65 ConstMethod* _constMethod; // Method read-only data.
66 MethodData* _method_data;
67 MethodCounters* _method_counters;
68 AccessFlags _access_flags; // Access flags
69 int _vtable_index; // vtable index of this method (see VtableIndexFlag)
70 // note: can have vtables with >2**16 elements (because of inheritance)
71 #ifdef CC_INTERP
72 int _result_index; // C++ interpreter needs for converting results to/from stack
73 #endif
74 u2 _method_size; // size of this object
75 u1 _intrinsic_id; // vmSymbols::intrinsic_id (0 == _none)
76
77 // Flags
78 enum Flags {
79 _jfr_towrite = 1 << 0,
80 _caller_sensitive = 1 << 1,
81 _force_inline = 1 << 2,
82 _dont_inline = 1 << 3,
83 _hidden = 1 << 4,
84 _has_injected_profile = 1 << 5,
85 _running_emcp = 1 << 6
86 };
87 u1 _flags;
88
89 #ifndef PRODUCT
90 int _compiled_invocation_count; // Number of nmethod invocations so far (for perf. debugging)
91 #endif
92 // Entry point for calling both from and to the interpreter.
93 address _i2i_entry; // All-args-on-stack calling convention
94 // Adapter blob (i2c/c2i) for this Method*. Set once when method is linked.
95 AdapterHandlerEntry* _adapter;
96 // Entry point for calling from compiled code, to compiled code if it exists
97 // or else the interpreter.
98 volatile address _from_compiled_entry; // Cache of: _code ? _code->entry_point() : _adapter->c2i_entry()
99 // The entry point for calling both from and to compiled code is
100 // "_code->entry_point()". Because of tiered compilation and de-opt, this
101 // field can come and go. It can transition from NULL to not-null at any
102 // time (whenever a compile completes). It can transition from not-null to
103 // NULL only at safepoints (because of a de-opt).
104 nmethod* volatile _code; // Points to the corresponding piece of native code
105 volatile address _from_interpreted_entry; // Cache of _code ? _adapter->i2c_entry() : _i2i_entry
796
797 bool force_inline() {
798 return (_flags & _force_inline) != 0;
799 }
800 void set_force_inline(bool x) {
801 _flags = x ? (_flags | _force_inline) : (_flags & ~_force_inline);
802 }
803
804 bool dont_inline() {
805 return (_flags & _dont_inline) != 0;
806 }
807 void set_dont_inline(bool x) {
808 _flags = x ? (_flags | _dont_inline) : (_flags & ~_dont_inline);
809 }
810
811 bool is_hidden() {
812 return (_flags & _hidden) != 0;
813 }
814 void set_hidden(bool x) {
815 _flags = x ? (_flags | _hidden) : (_flags & ~_hidden);
816 }
817
818 bool has_injected_profile() {
819 return (_flags & _has_injected_profile) != 0;
820 }
821 void set_has_injected_profile(bool x) {
822 _flags = x ? (_flags | _has_injected_profile) : (_flags & ~_has_injected_profile);
823 }
824
825 ConstMethod::MethodType method_type() const {
826 return _constMethod->method_type();
827 }
828 bool is_overpass() const { return method_type() == ConstMethod::OVERPASS; }
829
830 // On-stack replacement support
831 bool has_osr_nmethod(int level, bool match_level) {
832 return method_holder()->lookup_osr_nmethod(this, InvocationEntryBci, level, match_level) != NULL;
833 }
834
835 int mark_osr_nmethods() {
|
65 ConstMethod* _constMethod; // Method read-only data.
66 MethodData* _method_data;
67 MethodCounters* _method_counters;
68 AccessFlags _access_flags; // Access flags
69 int _vtable_index; // vtable index of this method (see VtableIndexFlag)
70 // note: can have vtables with >2**16 elements (because of inheritance)
71 #ifdef CC_INTERP
72 int _result_index; // C++ interpreter needs for converting results to/from stack
73 #endif
74 u2 _method_size; // size of this object
75 u1 _intrinsic_id; // vmSymbols::intrinsic_id (0 == _none)
76
77 // Flags
78 enum Flags {
79 _jfr_towrite = 1 << 0,
80 _caller_sensitive = 1 << 1,
81 _force_inline = 1 << 2,
82 _dont_inline = 1 << 3,
83 _hidden = 1 << 4,
84 _has_injected_profile = 1 << 5,
85 _running_emcp = 1 << 6,
86 _intrinsic_candidate = 1 << 7
87 };
88 u1 _flags;
89
90 #ifndef PRODUCT
91 int _compiled_invocation_count; // Number of nmethod invocations so far (for perf. debugging)
92 #endif
93 // Entry point for calling both from and to the interpreter.
94 address _i2i_entry; // All-args-on-stack calling convention
95 // Adapter blob (i2c/c2i) for this Method*. Set once when method is linked.
96 AdapterHandlerEntry* _adapter;
97 // Entry point for calling from compiled code, to compiled code if it exists
98 // or else the interpreter.
99 volatile address _from_compiled_entry; // Cache of: _code ? _code->entry_point() : _adapter->c2i_entry()
100 // The entry point for calling both from and to compiled code is
101 // "_code->entry_point()". Because of tiered compilation and de-opt, this
102 // field can come and go. It can transition from NULL to not-null at any
103 // time (whenever a compile completes). It can transition from not-null to
104 // NULL only at safepoints (because of a de-opt).
105 nmethod* volatile _code; // Points to the corresponding piece of native code
106 volatile address _from_interpreted_entry; // Cache of _code ? _adapter->i2c_entry() : _i2i_entry
797
798 bool force_inline() {
799 return (_flags & _force_inline) != 0;
800 }
801 void set_force_inline(bool x) {
802 _flags = x ? (_flags | _force_inline) : (_flags & ~_force_inline);
803 }
804
805 bool dont_inline() {
806 return (_flags & _dont_inline) != 0;
807 }
808 void set_dont_inline(bool x) {
809 _flags = x ? (_flags | _dont_inline) : (_flags & ~_dont_inline);
810 }
811
812 bool is_hidden() {
813 return (_flags & _hidden) != 0;
814 }
815 void set_hidden(bool x) {
816 _flags = x ? (_flags | _hidden) : (_flags & ~_hidden);
817 }
818
819 bool intrinsic_candidate() {
820 return (_flags & _intrinsic_candidate) != 0;
821 }
822 void set_intrinsic_candidate(bool x) {
823 _flags = x ? (_flags | _intrinsic_candidate) : (_flags & ~_intrinsic_candidate);
824 }
825
826 bool has_injected_profile() {
827 return (_flags & _has_injected_profile) != 0;
828 }
829 void set_has_injected_profile(bool x) {
830 _flags = x ? (_flags | _has_injected_profile) : (_flags & ~_has_injected_profile);
831 }
832
833 ConstMethod::MethodType method_type() const {
834 return _constMethod->method_type();
835 }
836 bool is_overpass() const { return method_type() == ConstMethod::OVERPASS; }
837
838 // On-stack replacement support
839 bool has_osr_nmethod(int level, bool match_level) {
840 return method_holder()->lookup_osr_nmethod(this, InvocationEntryBci, level, match_level) != NULL;
841 }
842
843 int mark_osr_nmethods() {
|