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