< prev index next >

src/hotspot/cpu/riscv/templateTable_riscv.cpp

Print this page

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) {
< prev index next >