< prev index next > src/hotspot/cpu/riscv/templateInterpreterGenerator_riscv.cpp
Print this page
}
// Interpreter stub for calling a native method. (asm interpreter)
// This sets up a somewhat different looking stack for calling the
// native method than the typical interpreter frame setup.
! address TemplateInterpreterGenerator::generate_native_entry(bool synchronized) {
// determine code generation flags
! bool inc_counter = UseCompiler || CountCompiledCalls;
// x11: Method*
// x30: sender sp
address entry_point = __ pc();
}
// Interpreter stub for calling a native method. (asm interpreter)
// This sets up a somewhat different looking stack for calling the
// native method than the typical interpreter frame setup.
! address TemplateInterpreterGenerator::generate_native_entry(bool synchronized, bool runtime_upcalls) {
// determine code generation flags
! bool inc_counter = (UseCompiler || CountCompiledCalls) && !PreloadOnly;
// x11: Method*
// x30: sender sp
address entry_point = __ pc();
}
//
// Generic interpreted method entry to (asm) interpreter
//
! address TemplateInterpreterGenerator::generate_normal_entry(bool synchronized) {
// determine code generation flags
! const bool inc_counter = UseCompiler || CountCompiledCalls;
// t0: sender sp
address entry_point = __ pc();
const Address constMethod(xmethod, Method::const_offset());
}
//
// Generic interpreted method entry to (asm) interpreter
//
! address TemplateInterpreterGenerator::generate_normal_entry(bool synchronized, bool runtime_upcalls) {
// determine code generation flags
! const bool inc_counter = (UseCompiler || CountCompiledCalls) && !PreloadOnly;
// t0: sender sp
address entry_point = __ pc();
const Address constMethod(xmethod, Method::const_offset());
__ pop_reg(ra);
__ ret(); // return from result handler
return entry;
}
+ #endif // PRODUCT
void TemplateInterpreterGenerator::count_bytecode() {
__ mv(x7, (address) &BytecodeCounter::_counter_value);
__ atomic_add(noreg, 1, x7);
}
void TemplateInterpreterGenerator::histogram_bytecode(Template* t) {
__ mv(x7, (address) &BytecodeHistogram::_counters[t->bytecode()]);
__ atomic_addw(noreg, 1, x7);
}
+ #ifndef PRODUCT
void TemplateInterpreterGenerator::histogram_bytecode_pair(Template* t) {
// Calculate new index for counter:
// _index = (_index >> log2_number_of_codes) |
// (bytecode << log2_number_of_codes);
Register index_addr = t1;
< prev index next >