2091 "inconsistent calls_vm information"); // call in remove_activation
2092
2093 if (_desc->bytecode() == Bytecodes::_return_register_finalizer) {
2094 assert(state == vtos, "only valid state");
2095
2096 __ ld(c_rarg1, aaddress(0));
2097 __ load_klass(x13, c_rarg1);
2098 __ lbu(x13, Address(x13, Klass::misc_flags_offset()));
2099 Label skip_register_finalizer;
2100 __ test_bit(t0, x13, exact_log2(KlassFlags::_misc_has_finalizer));
2101 __ beqz(t0, skip_register_finalizer);
2102
2103 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::register_finalizer), c_rarg1);
2104
2105 __ bind(skip_register_finalizer);
2106 }
2107
2108 // Issue a StoreStore barrier after all stores but before return
2109 // from any constructor for any class with a final field. We don't
2110 // know if this is a finalizer, so we always do so.
2111 if (_desc->bytecode() == Bytecodes::_return) {
2112 __ membar(MacroAssembler::StoreStore);
2113 }
2114
2115 if (_desc->bytecode() != Bytecodes::_return_register_finalizer) {
2116 Label no_safepoint;
2117 __ ld(t0, Address(xthread, JavaThread::polling_word_offset()));
2118 __ test_bit(t0, t0, exact_log2(SafepointMechanism::poll_bit()));
2119 __ beqz(t0, no_safepoint);
2120 __ push(state);
2121 __ push_cont_fastpath(xthread);
2122 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::at_safepoint));
2123 __ pop_cont_fastpath(xthread);
2124 __ pop(state);
2125 __ bind(no_safepoint);
2126 }
2127
2128 // Narrow result if state is itos but result type is smaller.
2129 // Need to narrow in the return bytecode rather than in generate_return_entry
2130 // since compiled code callers expect the result to already be narrowed.
2131 if (state == itos) {
|
2091 "inconsistent calls_vm information"); // call in remove_activation
2092
2093 if (_desc->bytecode() == Bytecodes::_return_register_finalizer) {
2094 assert(state == vtos, "only valid state");
2095
2096 __ ld(c_rarg1, aaddress(0));
2097 __ load_klass(x13, c_rarg1);
2098 __ lbu(x13, Address(x13, Klass::misc_flags_offset()));
2099 Label skip_register_finalizer;
2100 __ test_bit(t0, x13, exact_log2(KlassFlags::_misc_has_finalizer));
2101 __ beqz(t0, skip_register_finalizer);
2102
2103 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::register_finalizer), c_rarg1);
2104
2105 __ bind(skip_register_finalizer);
2106 }
2107
2108 // Issue a StoreStore barrier after all stores but before return
2109 // from any constructor for any class with a final field. We don't
2110 // know if this is a finalizer, so we always do so.
2111 if (_desc->bytecode() == Bytecodes::_return
2112 || _desc->bytecode() == Bytecodes::_return_register_finalizer) {
2113 __ membar(MacroAssembler::StoreStore);
2114 }
2115
2116 if (_desc->bytecode() != Bytecodes::_return_register_finalizer) {
2117 Label no_safepoint;
2118 __ ld(t0, Address(xthread, JavaThread::polling_word_offset()));
2119 __ test_bit(t0, t0, exact_log2(SafepointMechanism::poll_bit()));
2120 __ beqz(t0, no_safepoint);
2121 __ push(state);
2122 __ push_cont_fastpath(xthread);
2123 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::at_safepoint));
2124 __ pop_cont_fastpath(xthread);
2125 __ pop(state);
2126 __ bind(no_safepoint);
2127 }
2128
2129 // Narrow result if state is itos but result type is smaller.
2130 // Need to narrow in the return bytecode rather than in generate_return_entry
2131 // since compiled code callers expect the result to already be narrowed.
2132 if (state == itos) {
|