64 private:
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 _running_emcp = 1 << 5
85 };
86 u1 _flags;
87
88 #ifndef PRODUCT
89 int _compiled_invocation_count; // Number of nmethod invocations so far (for perf. debugging)
90 #endif
91 // Entry point for calling both from and to the interpreter.
92 address _i2i_entry; // All-args-on-stack calling convention
93 // Adapter blob (i2c/c2i) for this Method*. Set once when method is linked.
94 AdapterHandlerEntry* _adapter;
95 // Entry point for calling from compiled code, to compiled code if it exists
96 // or else the interpreter.
97 volatile address _from_compiled_entry; // Cache of: _code ? _code->entry_point() : _adapter->c2i_entry()
98 // The entry point for calling both from and to compiled code is
99 // "_code->entry_point()". Because of tiered compilation and de-opt, this
100 // field can come and go. It can transition from NULL to not-null at any
101 // time (whenever a compile completes). It can transition from not-null to
102 // NULL only at safepoints (because of a de-opt).
103 nmethod* volatile _code; // Points to the corresponding piece of native code
104 volatile address _from_interpreted_entry; // Cache of _code ? _adapter->i2c_entry() : _i2i_entry
794 return (_flags & _force_inline) != 0;
795 }
796 void set_force_inline(bool x) {
797 _flags = x ? (_flags | _force_inline) : (_flags & ~_force_inline);
798 }
799
800 bool dont_inline() {
801 return (_flags & _dont_inline) != 0;
802 }
803 void set_dont_inline(bool x) {
804 _flags = x ? (_flags | _dont_inline) : (_flags & ~_dont_inline);
805 }
806
807 bool is_hidden() {
808 return (_flags & _hidden) != 0;
809 }
810 void set_hidden(bool x) {
811 _flags = x ? (_flags | _hidden) : (_flags & ~_hidden);
812 }
813
814 ConstMethod::MethodType method_type() const {
815 return _constMethod->method_type();
816 }
817 bool is_overpass() const { return method_type() == ConstMethod::OVERPASS; }
818
819 // On-stack replacement support
820 bool has_osr_nmethod(int level, bool match_level) {
821 return method_holder()->lookup_osr_nmethod(this, InvocationEntryBci, level, match_level) != NULL;
822 }
823
824 int mark_osr_nmethods() {
825 return method_holder()->mark_osr_nmethods(this);
826 }
827
828 nmethod* lookup_osr_nmethod_for(int bci, int level, bool match_level) {
829 return method_holder()->lookup_osr_nmethod(this, bci, level, match_level);
830 }
831
832 // Inline cache support
833 void cleanup_inline_caches();
|
64 private:
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 _running_emcp = 1 << 5,
85 _shared = 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
795 return (_flags & _force_inline) != 0;
796 }
797 void set_force_inline(bool x) {
798 _flags = x ? (_flags | _force_inline) : (_flags & ~_force_inline);
799 }
800
801 bool dont_inline() {
802 return (_flags & _dont_inline) != 0;
803 }
804 void set_dont_inline(bool x) {
805 _flags = x ? (_flags | _dont_inline) : (_flags & ~_dont_inline);
806 }
807
808 bool is_hidden() {
809 return (_flags & _hidden) != 0;
810 }
811 void set_hidden(bool x) {
812 _flags = x ? (_flags | _hidden) : (_flags & ~_hidden);
813 }
814
815 bool is_shared() {
816 return (_flags & _shared) != 0;
817 }
818 void set_shared(bool x) {
819 _flags = x ? (_flags | _shared) : (_flags & ~_shared);
820 }
821
822 ConstMethod::MethodType method_type() const {
823 return _constMethod->method_type();
824 }
825 bool is_overpass() const { return method_type() == ConstMethod::OVERPASS; }
826
827 // On-stack replacement support
828 bool has_osr_nmethod(int level, bool match_level) {
829 return method_holder()->lookup_osr_nmethod(this, InvocationEntryBci, level, match_level) != NULL;
830 }
831
832 int mark_osr_nmethods() {
833 return method_holder()->mark_osr_nmethods(this);
834 }
835
836 nmethod* lookup_osr_nmethod_for(int bci, int level, bool match_level) {
837 return method_holder()->lookup_osr_nmethod(this, bci, level, match_level);
838 }
839
840 // Inline cache support
841 void cleanup_inline_caches();
|