本文整理汇总了C++中methodOop::max_locals方法的典型用法代码示例。如果您正苦于以下问题:C++ methodOop::max_locals方法的具体用法?C++ methodOop::max_locals怎么用?C++ methodOop::max_locals使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类methodOop
的用法示例。
在下文中一共展示了methodOop::max_locals方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: check_stack_and_locals_size
int MethodComparator::check_stack_and_locals_size(methodOop old_method, methodOop new_method) {
if (old_method->max_stack() != new_method->max_stack()) {
return 1;
} else if (old_method->max_locals() != new_method->max_locals()) {
return 2;
} else if (old_method->size_of_parameters() != new_method->size_of_parameters()) {
return 3;
} else return 0;
}
示例2: hash
// for hashing into the table
static int hash(methodOop method) {
// The point here is to try to make something fairly unique
// out of the fields we can read without grabbing any locks
// since the method may be locked when we need the hash.
return (
method->code_size() ^
method->max_stack() ^
method->max_locals() ^
method->size_of_parameters());
}
示例3: layout_activation
int AbstractInterpreter::layout_activation(methodOop method,
int tempcount,
int popframe_extra_args,
int moncount,
int caller_actual_parameters,
int callee_param_count,
int callee_locals,
frame* caller,
frame* interpreter_frame,
bool is_top_frame,
bool is_bottom_frame) {
assert(popframe_extra_args == 0, "what to do?");
assert(!is_top_frame || (!callee_locals && !callee_param_count),
"top frame should have no caller");
// This code must exactly match what InterpreterFrame::build
// does (the full InterpreterFrame::build, that is, not the
// one that creates empty frames for the deoptimizer).
//
// If interpreter_frame is not NULL then it will be filled in.
// It's size is determined by a previous call to this method,
// so it should be correct.
//
// Note that tempcount is the current size of the expression
// stack. For top most frames we will allocate a full sized
// expression stack and not the trimmed version that non-top
// frames have.
int header_words = InterpreterFrame::header_words;
int monitor_words = moncount * frame::interpreter_frame_monitor_size();
int stack_words = is_top_frame ? method->max_stack() : tempcount;
int callee_extra_locals = callee_locals - callee_param_count;
if (interpreter_frame) {
intptr_t *locals = interpreter_frame->fp() + method->max_locals();
interpreterState istate = interpreter_frame->get_interpreterState();
intptr_t *monitor_base = (intptr_t*) istate;
intptr_t *stack_base = monitor_base - monitor_words;
intptr_t *stack = stack_base - tempcount - 1;
BytecodeInterpreter::layout_interpreterState(istate,
caller,
NULL,
method,
locals,
stack,
stack_base,
monitor_base,
NULL,
is_top_frame);
}
return header_words + monitor_words + stack_words + callee_extra_locals;
}
示例4: size_top_interpreter_activation
int AbstractInterpreter::size_top_interpreter_activation(methodOop method)
{
#ifdef PPC
StackFrame frame;
int call_stub_frame = round_to(
StubRoutines::call_stub_base_size() +
method->max_locals() * wordSize, StackAlignmentInBytes);
int interpreter_frame = round_to(
frame.unaligned_size() +
slop_factor +
method->max_stack() * wordSize +
(method->is_synchronized() ?
frame::interpreter_frame_monitor_size() * wordSize : 0) +
sizeof(BytecodeInterpreter), StackAlignmentInBytes);
return (call_stub_frame + interpreter_frame) / wordSize;
#else
Unimplemented();
#endif // PPC
}
示例5: print_xml_on
void vframe::print_xml_on(JavaThread *thread, xmlBuffer *xb) const {
ResourceMark rm;
frame fr = get_frame();
const char *frame_style = "UNKNOWN";
CodeBlob*cb=CodeCache::find_blob(fr.pc());
if( fr.is_interpreted_frame() )
frame_style = "INTERPRETER";
else if( cb && cb->is_native_method() )
frame_style = "NATIVE";
else if( cb && cb->is_c1_method() )
frame_style = "COMPILER1";
else if( cb && cb->is_c2_method() )
frame_style = "COMPILER2";
// Frame header
xb->name_value_item("frame_style",frame_style);
// Java Locals
if (!fr.is_java_frame())
return; // no more printing to be done
const methodOop moop = method();
if (moop->is_native())
return; // no more printing to be done
const int max_locals = moop->max_locals();
if(fr.is_compiled_frame()){
for( int i=0; i<max_locals; i++ ) {
xmlElement je(xb, "java_element");
{ xmlElement n(xb, "name", xmlElement::delayed_LF);
bool out_of_scope = true;
const char* name = moop->localvariable_name(i, bci(), out_of_scope);
if( name ) xb->print("%s%s%s", out_of_scope ? "{": "", name, out_of_scope ? "}": "");
else xb->print("JL%-2d", i);
}
DebugScopeValue::Name vreg = _ds->get_local(i);
if( !DebugScopeValue::is_valid(vreg) ) {
xb->name_value_item("type","invalid");
xb->name_ptr_item("value",0);
} else {
intptr_t *data_ptr = fr.reg_to_addr(DebugScopeValue::to_vreg(vreg));
const int rel_pc = cb->rel_pc(fr.pc());
const bool isoop = cb->oop_maps()->is_oop( rel_pc, VReg::as_VOopReg(DebugScopeValue::to_vreg(vreg)) );
if( isoop ) {
xb->name_value_item("type", "oop");
oop o = ((objectRef*)data_ptr)->as_oop();
o->print_xml_on(xb, true);
} else {
xb->name_value_item("type", "normal");
xb->name_ptr_item("value", (void*)*data_ptr);
}
}
}
}else if(fr.is_interpreted_frame()){
for( int i = 0; i < max_locals; i++ ) {
frame::InterpreterStackSlotType tag = fr.tag_at_address(fr.interpreter_frame_local_addr(i));
if (tag == frame::double_slot_primitive_type)
i++;//skip the tag slot
xmlElement je(xb, "java_element");
{ xmlElement n(xb, "name", xmlElement::delayed_LF);
bool out_of_scope = true;
const char* name = moop->localvariable_name(i, bci(), out_of_scope);
if (name != NULL) {
xb->print("%s%s%s", out_of_scope ? "{": "", name, out_of_scope ? "}": "");
} else {
xb->print("JL%-2d", i);
}
}
intptr_t local_value = fr.interpreter_frame_local_at(i);
switch (tag) {
case frame::single_slot_primitive_type: {
xb->name_value_item("type", "single_slot_primitive_type");
xb->name_ptr_item("value", (void*)local_value);
break;
}
case frame::double_slot_primitive_type: {
xb->name_value_item("type", "double_slot_primitive_type");
xb->name_ptr_item("value", (void*)local_value);
break;
}
case frame::single_slot_ref_type: {
xb->name_value_item("type", "oop");
oop o = objectRef((uint64_t)local_value).as_oop();
o->print_xml_on(xb, true);
break;
}
default: ShouldNotReachHere(); break;
}
}
}
}
示例6: build_repack_buffer
//.........这里部分代码省略.........
!ds->should_reexecute())
bci_bump = 5; // Increment the BCP to post-call!!! See below!
break;
}
case Bytecodes::_ldc :
Untested("");
return_type=constant_pool_type(moop,*(bcp+1));
if( !ds->should_reexecute()) bci_bump = 2; // Increment the BCP to post-call!!! See below!
break;
case Bytecodes::_ldc_w : // fall through
case Bytecodes::_ldc2_w:
return_type=constant_pool_type(moop,Bytes::get_Java_u2(bcp+1));
if( !ds->should_reexecute()) bci_bump = 3; // Increment the BCP to post-call!!! See below!
break;
default:
return_type=Bytecodes::result_type(c);
if( !ds->should_reexecute()) bci_bump = Bytecodes::length_at(bcp); // Increment the BCP to post-call!!! See below!
break;
}
if (ds->should_reexecute()) return_type = T_VOID;
}
// Save (possibly advanced) bci
buf->_bci = bci+bci_bump;
buf[-1]._retadr = Interpreter::unpack_and_go(); // Interpreter::return_entry(vtos, bci_bump);
}
// ---
// Now all the Java locals.
// First set the start of locals for the interpreter frame we are building.
buf->_loc = (intptr_t)jexstk;
uint loc_len = moop->max_locals();
for(uint i=0;i<loc_len;i++){
*jexstk++ = dm->get_value(ds->get_local(i),fr);
}
// Now that the locals have been unpacked if we have any deferred local writes
// added by jvmti then we can free up that structure as the data is now in the
// buffer
GrowableArray<jvmtiDeferredLocalVariableSet*>* list = thread->deferred_locals();
if( list ) {
// Because of inlining we could have multiple vframes for a single frame
// and several of the vframes could have deferred writes. Find them all.
Unimplemented();
}
// ---
// Now all the Java Expressions
uint expr_len = ds->numstk();
for(uint i=0;i<expr_len;i++)
*jexstk++ = dm->get_value(ds->get_expr(i),fr);
// If returning from a deoptimized call, we will have return values in
// registers that need to end up on the Java execution stack. They are
// not recorded in the debug info, since they did not exist at the time
// the call began.
if( is_youngest && is_deopt ) {
if( type2size[return_type] > 0 ) {
if( type2size[return_type]==2 ) {
*jexstk++ = (intptr_t)frame::double_slot_primitive_type_empty_slot_id << 32;
}
*jexstk++ = pd_fetch_return_values( thread, return_type );
// Need to adjust the final jexstk_top for the youngest frame
// returning values. These returned values are not accounted for in