本文整理汇总了C++中LIR_Opr::is_oop方法的典型用法代码示例。如果您正苦于以下问题:C++ LIR_Opr::is_oop方法的具体用法?C++ LIR_Opr::is_oop怎么用?C++ LIR_Opr::is_oop使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LIR_Opr
的用法示例。
在下文中一共展示了LIR_Opr::is_oop方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: process_move
void LIR_OopMapGenerator::process_move(LIR_Op* op) {
LIR_Op1* op1 = op->as_Op1();
LIR_Opr src = op1->in_opr();
LIR_Opr dst = op1->result_opr();
assert(!src->is_stack() || !dst->is_stack(), "No memory-memory moves allowed");
if ((src->is_stack() && frame_map()->is_spill_pos(src)) ||
(dst->is_stack() && frame_map()->is_spill_pos(dst))) {
// Oops in the spill area are handled by another mechanism (see
// CodeEmitInfo::record_spilled_oops)
return;
}
if (dst->is_oop()) {
assert((src->is_oop() &&
(src->is_stack() || src->is_register() || src->is_constant())
) ||
src->is_address(), "Wrong tracking of oops/non-oops in LIR");
assert(!src->is_stack() || is_marked(src->single_stack_ix()),
"Error in tracking of oop stores to stack");
if (dst->is_stack()) {
mark(dst->single_stack_ix());
} else if (dst->is_register()) {
if (LIRCacheLocals) {
if (local_mapping()->is_cache_reg(dst)) {
mark(dst);
}
} else {
assert(local_mapping() == NULL, "expected no local mapping");
}
}
} else {
// !dst->is_oop()
// Note that dst may be an address
assert(!src->is_single_stack() || !is_marked(src->single_stack_ix()), "Error in tracking of oop stores to stack");
assert(!src->is_double_stack() || !is_marked(src->double_stack_ix()), "Error in tracking of oop stores to stack");
assert(!src->is_double_stack() || !is_marked(1 + src->double_stack_ix()), "Error in tracking of oop stores to stack");
if (dst->is_stack()) {
if (dst->is_single_stack()) {
clear_all(dst->single_stack_ix());
} else {
clear_all(dst->double_stack_ix());
clear_all(1 + dst->double_stack_ix());
}
} else if (dst->is_register()) {
if (LIRCacheLocals) {
if (local_mapping()->is_cache_reg(dst)) {
clear_all(dst);
}
} else {
assert(local_mapping() == NULL, "expected no local mapping");
}
}
}
}
示例2: push
void C1_MacroAssembler::build_frame(FrameMap* frame_map) {
// offset from the expected fixed sp within the method
int sp_offset = in_bytes(frame_map->framesize_in_bytes()) - 8; // call pushed the return IP
if( frame_map->num_callee_saves() > 0 ) {
int callee_save_num = frame_map->num_callee_saves()-1;
int callee_saves = frame_map->callee_saves(); // bitmap
for (int i=LinearScan::nof_cpu_regs-1; i>=0; i--) {
if ((callee_saves & 1<<i) != 0) {
int wanted_sp_offset = frame_map->address_for_callee_save(callee_save_num)._disp;
assert0( sp_offset-8 == wanted_sp_offset );
push((Register)i);
sp_offset -= 8;
callee_save_num--;
assert0( callee_save_num >= -1 );
}
}
#ifdef ASSERT
for(int i=0;i<LinearScan::nof_xmm_regs;i++){
int reg = LinearScan::nof_cpu_regs+i;
assert ((callee_saves & 1<<reg) == 0, "Unexpected callee save XMM register");
}
#endif
}
if (sp_offset != 0) {
// make sp equal expected sp for method
if (sp_offset == 8) push (RCX); // push reg as smaller encoding than sub8i
else sub8i (RSP, sp_offset );
}
if( should_verify_oop(MacroAssembler::OopVerify_IncomingArgument) ) {
int args_len = frame_map->incoming_arguments()->length();
for(int i=0; i < args_len; i++) {
LIR_Opr arg = frame_map->incoming_arguments()->at(i);
if (arg->is_valid() && arg->is_oop()) {
VOopReg::VR oop = frame_map->oopregname(arg);
verify_oop(oop, MacroAssembler::OopVerify_IncomingArgument);
}
}
}
}
示例3: emit_call
void LIR_Assembler::emit_call(LIR_OpJavaCall* op) {
if( _masm->should_verify_oop(MacroAssembler::OopVerify_OutgoingArgument) ) {
int len = op->arguments()->length();
for(int i=0;i<len;i++){
LIR_Opr opr = op->arguments()->at(i);
if( opr->is_oop() ) _masm->verify_oop(_frame_map->oopregname(opr), MacroAssembler::OopVerify_OutgoingArgument);
}
}
switch (op->code()) {
case lir_static_call:
call(op->addr(),op->info());
break;
case lir_optvirtual_call:
call(op->addr(),op->info());
break;
case lir_icvirtual_call:
ic_call(op->addr(), op->info());
break;
case lir_virtual_call:
vtable_call(op->vtable_offset(), op->info());
break;
default: ShouldNotReachHere();
}
}