< prev index next >

src/hotspot/cpu/riscv/templateTable_riscv.cpp

Print this page

2090          "inconsistent calls_vm information"); // call in remove_activation
2091 
2092   if (_desc->bytecode() == Bytecodes::_return_register_finalizer) {
2093     assert(state == vtos, "only valid state");
2094 
2095     __ ld(c_rarg1, aaddress(0));
2096     __ load_klass(x13, c_rarg1);
2097     __ lbu(x13, Address(x13, Klass::misc_flags_offset()));
2098     Label skip_register_finalizer;
2099     __ test_bit(t0, x13, exact_log2(KlassFlags::_misc_has_finalizer));
2100     __ beqz(t0, skip_register_finalizer);
2101 
2102     __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::register_finalizer), c_rarg1);
2103 
2104     __ bind(skip_register_finalizer);
2105   }
2106 
2107   // Issue a StoreStore barrier after all stores but before return
2108   // from any constructor for any class with a final field. We don't
2109   // know if this is a finalizer, so we always do so.
2110   if (_desc->bytecode() == Bytecodes::_return) {

2111     __ membar(MacroAssembler::StoreStore);
2112   }
2113 
2114   if (_desc->bytecode() != Bytecodes::_return_register_finalizer) {
2115     Label no_safepoint;
2116     __ ld(t0, Address(xthread, JavaThread::polling_word_offset()));
2117     __ test_bit(t0, t0, exact_log2(SafepointMechanism::poll_bit()));
2118     __ beqz(t0, no_safepoint);
2119     __ push(state);
2120     __ push_cont_fastpath(xthread);
2121     __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::at_safepoint));
2122     __ pop_cont_fastpath(xthread);
2123     __ pop(state);
2124     __ bind(no_safepoint);
2125   }
2126 
2127   // Narrow result if state is itos but result type is smaller.
2128   // Need to narrow in the return bytecode rather than in generate_return_entry
2129   // since compiled code callers expect the result to already be narrowed.
2130   if (state == itos) {

2090          "inconsistent calls_vm information"); // call in remove_activation
2091 
2092   if (_desc->bytecode() == Bytecodes::_return_register_finalizer) {
2093     assert(state == vtos, "only valid state");
2094 
2095     __ ld(c_rarg1, aaddress(0));
2096     __ load_klass(x13, c_rarg1);
2097     __ lbu(x13, Address(x13, Klass::misc_flags_offset()));
2098     Label skip_register_finalizer;
2099     __ test_bit(t0, x13, exact_log2(KlassFlags::_misc_has_finalizer));
2100     __ beqz(t0, skip_register_finalizer);
2101 
2102     __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::register_finalizer), c_rarg1);
2103 
2104     __ bind(skip_register_finalizer);
2105   }
2106 
2107   // Issue a StoreStore barrier after all stores but before return
2108   // from any constructor for any class with a final field. We don't
2109   // know if this is a finalizer, so we always do so.
2110   if (_desc->bytecode() == Bytecodes::_return
2111       || _desc->bytecode() == Bytecodes::_return_register_finalizer) {
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) {
< prev index next >