< prev index next >

src/hotspot/share/oops/method.hpp

Print this page

        

*** 89,99 **** _dont_inline = 1 << 2, _hidden = 1 << 3, _has_injected_profile = 1 << 4, _running_emcp = 1 << 5, _intrinsic_candidate = 1 << 6, ! _reserved_stack_access = 1 << 7 }; mutable u2 _flags; JFR_ONLY(DEFINE_TRACE_FLAG;) --- 89,102 ---- _dont_inline = 1 << 2, _hidden = 1 << 3, _has_injected_profile = 1 << 4, _running_emcp = 1 << 5, _intrinsic_candidate = 1 << 6, ! _reserved_stack_access = 1 << 7, ! _scalarized_args = 1 << 8, ! _c1_needs_stack_repair = 1 << 9, ! _c2_needs_stack_repair = 1 << 10 }; mutable u2 _flags; JFR_ONLY(DEFINE_TRACE_FLAG;)
*** 102,119 **** #endif // Entry point for calling both from and to the interpreter. address _i2i_entry; // All-args-on-stack calling convention // Entry point for calling from compiled code, to compiled code if it exists // or else the interpreter. ! volatile address _from_compiled_entry; // Cache of: _code ? _code->entry_point() : _adapter->c2i_entry() // The entry point for calling both from and to compiled code is // "_code->entry_point()". Because of tiered compilation and de-opt, this // field can come and go. It can transition from NULL to not-null at any // time (whenever a compile completes). It can transition from not-null to // NULL only at safepoints (because of a de-opt). CompiledMethod* volatile _code; // Points to the corresponding piece of native code volatile address _from_interpreted_entry; // Cache of _code ? _adapter->i2c_entry() : _i2i_entry #if INCLUDE_AOT && defined(TIERED) CompiledMethod* _aot_code; #endif --- 105,125 ---- #endif // Entry point for calling both from and to the interpreter. address _i2i_entry; // All-args-on-stack calling convention // Entry point for calling from compiled code, to compiled code if it exists // or else the interpreter. ! volatile address _from_compiled_entry; // Cache of: _code ? _code->verified_entry_point() : _adapter->c2i_entry() ! volatile address _from_compiled_value_ro_entry; // Cache of: _code ? _code->verified_value_ro_entry_point() : _adapter->c2i_value_ro_entry() ! volatile address _from_compiled_value_entry; // Cache of: _code ? _code->verified_value_entry_point() : _adapter->c2i_value_entry() // The entry point for calling both from and to compiled code is // "_code->entry_point()". Because of tiered compilation and de-opt, this // field can come and go. It can transition from NULL to not-null at any // time (whenever a compile completes). It can transition from not-null to // NULL only at safepoints (because of a de-opt). CompiledMethod* volatile _code; // Points to the corresponding piece of native code volatile address _from_interpreted_entry; // Cache of _code ? _adapter->i2c_entry() : _i2i_entry + int _max_vt_buffer; // max number of VT buffer chunk to use before recycling #if INCLUDE_AOT && defined(TIERED) CompiledMethod* _aot_code; #endif
*** 141,151 **** void set_constMethod(ConstMethod* xconst) { _constMethod = xconst; } static address make_adapters(const methodHandle& mh, TRAPS); address from_compiled_entry() const; ! address from_compiled_entry_no_trampoline() const; address from_interpreted_entry() const; // access flag AccessFlags access_flags() const { return _access_flags; } void set_access_flags(AccessFlags flags) { _access_flags = flags; } --- 147,157 ---- void set_constMethod(ConstMethod* xconst) { _constMethod = xconst; } static address make_adapters(const methodHandle& mh, TRAPS); address from_compiled_entry() const; ! address from_compiled_entry_no_trampoline(bool caller_is_c1) const; address from_interpreted_entry() const; // access flag AccessFlags access_flags() const { return _access_flags; } void set_access_flags(AccessFlags flags) { _access_flags = flags; }
*** 459,468 **** --- 465,476 ---- // if this (shared) method were mapped into another JVM. void remove_unshareable_info(); // nmethod/verified compiler entry address verified_code_entry(); + address verified_value_code_entry(); + address verified_value_ro_code_entry(); bool check_code() const; // Not inline to avoid circular ref CompiledMethod* volatile code() const; // Locks CompiledMethod_lock if not held. void unlink_code(CompiledMethod *compare);
*** 488,498 **** --- 496,508 ---- _from_compiled_entry = entry; } address get_i2c_entry(); address get_c2i_entry(); + address get_c2i_value_entry(); address get_c2i_unverified_entry(); + address get_c2i_unverified_value_entry(); AdapterHandlerEntry* adapter() const { return constMethod()->adapter(); } // setup entry points void link_method(const methodHandle& method, TRAPS);
*** 601,612 **** InstanceKlass* method_holder() const { return constants()->pool_holder(); } void compute_size_of_parameters(Thread *thread); // word size of parameters (receiver if any + arguments) Symbol* klass_name() const; // returns the name of the method holder BasicType result_type() const; // type of the method result ! bool is_returning_oop() const { BasicType r = result_type(); return (r == T_OBJECT || r == T_ARRAY); } ! bool is_returning_fp() const { BasicType r = result_type(); return (r == T_FLOAT || r == T_DOUBLE); } // Checked exceptions thrown by this method (resolved to mirrors) objArrayHandle resolved_checked_exceptions(TRAPS) { return resolved_checked_exceptions_impl(this, THREAD); } // Access flags --- 611,622 ---- InstanceKlass* method_holder() const { return constants()->pool_holder(); } void compute_size_of_parameters(Thread *thread); // word size of parameters (receiver if any + arguments) Symbol* klass_name() const; // returns the name of the method holder BasicType result_type() const; // type of the method result ! bool may_return_oop() const { BasicType r = result_type(); return (r == T_OBJECT || r == T_ARRAY || r == T_VALUETYPE); } ! ValueKlass* returned_value_type(Thread* thread) const; // Checked exceptions thrown by this method (resolved to mirrors) objArrayHandle resolved_checked_exceptions(TRAPS) { return resolved_checked_exceptions_impl(this, THREAD); } // Access flags
*** 675,696 **** bool is_setter() const; // returns true if the method does nothing but return a constant of primitive type bool is_constant_getter() const; - // returns true if the method is an initializer (<init> or <clinit>). - bool is_initializer() const; - - // returns true if the method is static OR if the classfile version < 51 - bool has_valid_initializer_flags() const; - // returns true if the method name is <clinit> and the method has // valid static initializer flags. ! bool is_static_initializer() const; ! // returns true if the method name is <init> ! bool is_object_initializer() const; // compiled code support // NOTE: code() is inherently racy as deopt can be clearing code // simultaneously. Use with caution. bool has_compiled_code() const; --- 685,707 ---- bool is_setter() const; // returns true if the method does nothing but return a constant of primitive type bool is_constant_getter() const; // returns true if the method name is <clinit> and the method has // valid static initializer flags. ! bool is_class_initializer() const; ! ! // returns true if the method name is <init> and the method is not a static factory ! bool is_object_constructor() const; ! // returns true if the method is an object constructor or class initializer ! // (non-static <init> or <clinit>), but false for factories (static <init>). ! bool is_object_constructor_or_class_initializer() const; ! ! // returns true if the method name is <init> and the method is static ! bool is_static_init_factory() const; // compiled code support // NOTE: code() is inherently racy as deopt can be clearing code // simultaneously. Use with caution. bool has_compiled_code() const;
*** 715,725 **** --- 726,739 ---- // interpreter support static ByteSize const_offset() { return byte_offset_of(Method, _constMethod ); } static ByteSize access_flags_offset() { return byte_offset_of(Method, _access_flags ); } static ByteSize from_compiled_offset() { return byte_offset_of(Method, _from_compiled_entry); } + static ByteSize from_compiled_value_offset() { return byte_offset_of(Method, _from_compiled_value_entry); } + static ByteSize from_compiled_value_ro_offset(){ return byte_offset_of(Method, _from_compiled_value_ro_entry); } static ByteSize code_offset() { return byte_offset_of(Method, _code); } + static ByteSize flags_offset() { return byte_offset_of(Method, _flags); } static ByteSize method_data_offset() { return byte_offset_of(Method, _method_data); } static ByteSize method_counters_offset() { return byte_offset_of(Method, _method_counters);
*** 736,745 **** --- 750,761 ---- // for code generation static int method_data_offset_in_bytes() { return offset_of(Method, _method_data); } static int intrinsic_id_offset_in_bytes() { return offset_of(Method, _intrinsic_id); } static int intrinsic_id_size_in_bytes() { return sizeof(u2); } + static ByteSize max_vt_buffer_offset() { return byte_offset_of(Method, _max_vt_buffer); } + // Static methods that are used to implement member methods where an exposed this pointer // is needed due to possible GCs static objArrayHandle resolved_checked_exceptions_impl(Method* method, TRAPS); // Returns the byte code index from the byte code pointer
*** 915,924 **** --- 931,964 ---- void set_has_reserved_stack_access(bool x) { _flags = x ? (_flags | _reserved_stack_access) : (_flags & ~_reserved_stack_access); } + bool has_scalarized_args() { + return (_flags & _scalarized_args) != 0; + } + + void set_has_scalarized_args(bool x) { + _flags = x ? (_flags | _scalarized_args) : (_flags & ~_scalarized_args); + } + + bool c1_needs_stack_repair() { + return (_flags & _c1_needs_stack_repair) != 0; + } + + bool c2_needs_stack_repair() { + return (_flags & _c2_needs_stack_repair) != 0; + } + + void set_c1_needs_stack_repair(bool x) { + _flags = x ? (_flags | _c1_needs_stack_repair) : (_flags & ~_c1_needs_stack_repair); + } + + void set_c2_needs_stack_repair(bool x) { + _flags = x ? (_flags | _c2_needs_stack_repair) : (_flags & ~_c2_needs_stack_repair); + } + JFR_ONLY(DEFINE_TRACE_FLAG_ACCESSOR;) ConstMethod::MethodType method_type() const { return _constMethod->method_type(); }
< prev index next >