# HG changeset patch # User thartmann # Date 1564034673 -7200 # Node ID 9b6d4e64778ce5e6a09c0178322a8e73067fa8a1 # Parent 6073b2290c0aef0631638d06495e76b2876b3b74 8071275: remove AbstractAssembler::update_delayed_values dead code Summary: Removed dead code. Reviewed-by: thartmann, mdoerr Contributed-by: Christian Hagedorn diff -r 6073b2290c0a -r 9b6d4e64778c src/hotspot/cpu/ppc/macroAssembler_ppc.cpp --- a/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp Wed Jul 24 17:08:14 2019 -0700 +++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp Thu Jul 25 08:04:33 2019 +0200 @@ -2040,17 +2040,6 @@ bind(L_fallthrough); } -void MacroAssembler::check_method_handle_type(Register mtype_reg, Register mh_reg, - Register temp_reg, - Label& wrong_method_type) { - assert_different_registers(mtype_reg, mh_reg, temp_reg); - // Compare method type against that of the receiver. - load_heap_oop(temp_reg, delayed_value(java_lang_invoke_MethodHandle::type_offset_in_bytes, temp_reg), mh_reg, - noreg, noreg, false, IS_NOT_NULL); - cmpd(CCR0, temp_reg, mtype_reg); - bne(CCR0, wrong_method_type); -} - RegisterOrConstant MacroAssembler::argument_offset(RegisterOrConstant arg_slot, Register temp_reg, int extra_slot_offset) { diff -r 6073b2290c0a -r 9b6d4e64778c src/hotspot/cpu/ppc/macroAssembler_ppc.hpp --- a/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp Wed Jul 24 17:08:14 2019 -0700 +++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp Thu Jul 25 08:04:33 2019 +0200 @@ -565,8 +565,6 @@ Label* L_slow_path = NULL); // Method handle support (JSR 292). - void check_method_handle_type(Register mtype_reg, Register mh_reg, Register temp_reg, Label& wrong_method_type); - RegisterOrConstant argument_offset(RegisterOrConstant arg_slot, Register temp_reg, int extra_slot_offset = 0); // Biased locking support diff -r 6073b2290c0a -r 9b6d4e64778c src/hotspot/share/asm/assembler.cpp --- a/src/hotspot/share/asm/assembler.cpp Wed Jul 24 17:08:14 2019 -0700 +++ b/src/hotspot/share/asm/assembler.cpp Thu Jul 25 08:04:33 2019 +0200 @@ -218,85 +218,6 @@ } } -struct DelayedConstant { - typedef void (*value_fn_t)(); - BasicType type; - intptr_t value; - value_fn_t value_fn; - // This limit of 20 is generous for initial uses. - // The limit needs to be large enough to store the field offsets - // into classes which do not have statically fixed layouts. - // (Initial use is for method handle object offsets.) - // Look for uses of "delayed_value" in the source code - // and make sure this number is generous enough to handle all of them. - enum { DC_LIMIT = 20 }; - static DelayedConstant delayed_constants[DC_LIMIT]; - static DelayedConstant* add(BasicType type, value_fn_t value_fn); - bool match(BasicType t, value_fn_t cfn) { - return type == t && value_fn == cfn; - } - static void update_all(); -}; - -DelayedConstant DelayedConstant::delayed_constants[DC_LIMIT]; -// Default C structure initialization rules have the following effect here: -// = { { (BasicType)0, (intptr_t)NULL }, ... }; - -DelayedConstant* DelayedConstant::add(BasicType type, - DelayedConstant::value_fn_t cfn) { - for (int i = 0; i < DC_LIMIT; i++) { - DelayedConstant* dcon = &delayed_constants[i]; - if (dcon->match(type, cfn)) - return dcon; - if (dcon->value_fn == NULL) { - dcon->value_fn = cfn; - dcon->type = type; - return dcon; - } - } - // If this assert is hit (in pre-integration testing!) then re-evaluate - // the comment on the definition of DC_LIMIT. - guarantee(false, "too many delayed constants"); - return NULL; -} - -void DelayedConstant::update_all() { - for (int i = 0; i < DC_LIMIT; i++) { - DelayedConstant* dcon = &delayed_constants[i]; - if (dcon->value_fn != NULL && dcon->value == 0) { - typedef int (*int_fn_t)(); - typedef address (*address_fn_t)(); - switch (dcon->type) { - case T_INT: dcon->value = (intptr_t) ((int_fn_t) dcon->value_fn)(); break; - case T_ADDRESS: dcon->value = (intptr_t) ((address_fn_t)dcon->value_fn)(); break; - default: break; - } - } - } -} - -RegisterOrConstant AbstractAssembler::delayed_value(int(*value_fn)(), Register tmp, int offset) { - intptr_t val = (intptr_t) (*value_fn)(); - if (val != 0) return val + offset; - return delayed_value_impl(delayed_value_addr(value_fn), tmp, offset); -} -RegisterOrConstant AbstractAssembler::delayed_value(address(*value_fn)(), Register tmp, int offset) { - intptr_t val = (intptr_t) (*value_fn)(); - if (val != 0) return val + offset; - return delayed_value_impl(delayed_value_addr(value_fn), tmp, offset); -} -intptr_t* AbstractAssembler::delayed_value_addr(int(*value_fn)()) { - DelayedConstant* dcon = DelayedConstant::add(T_INT, (DelayedConstant::value_fn_t) value_fn); - return &dcon->value; -} -intptr_t* AbstractAssembler::delayed_value_addr(address(*value_fn)()) { - DelayedConstant* dcon = DelayedConstant::add(T_ADDRESS, (DelayedConstant::value_fn_t) value_fn); - return &dcon->value; -} -void AbstractAssembler::update_delayed_values() { - DelayedConstant::update_all(); -} - void AbstractAssembler::block_comment(const char* comment) { if (sect() == CodeBuffer::SECT_INSTS) { code_section()->outer()->block_comment(offset(), comment); diff -r 6073b2290c0a -r 9b6d4e64778c src/hotspot/share/classfile/javaClasses.cpp --- a/src/hotspot/share/classfile/javaClasses.cpp Wed Jul 24 17:08:14 2019 -0700 +++ b/src/hotspot/share/classfile/javaClasses.cpp Thu Jul 25 08:04:33 2019 +0200 @@ -4547,9 +4547,6 @@ // BASIC_JAVA_CLASSES_DO_PART1 classes (java_lang_String and java_lang_Class) // earlier inside SystemDictionary::resolve_well_known_classes() BASIC_JAVA_CLASSES_DO_PART2(DO_COMPUTE_OFFSETS); - - // generated interpreter code wants to know about the offsets we just computed: - AbstractAssembler::update_delayed_values(); } #if INCLUDE_CDS