void FpuStackAllocator::merge_cleanup_fpu_stack(LIR_List* instrs, FpuStackSim* cur_sim, BitMap& live_fpu_regs) { #ifndef PRODUCT if (TraceFPUStack) { tty->cr(); tty->print("before cleanup: state: "); cur_sim->print(); tty->cr(); tty->print(" live: "); live_fpu_regs.print_on(tty); tty->cr(); } #endif int slot = 0; while (slot < cur_sim->stack_size()) { int reg = cur_sim->get_slot(slot); if (!live_fpu_regs.at(reg)) { if (slot != 0) { merge_insert_xchg(instrs, cur_sim, slot); } merge_insert_pop(instrs, cur_sim); } else { slot++; } } #ifndef PRODUCT if (TraceFPUStack) { tty->print("after cleanup: state: "); cur_sim->print(); tty->cr(); tty->print(" live: "); live_fpu_regs.print_on(tty); tty->cr(); tty->cr(); } // check if fpu stack only contains live registers for (unsigned int i = 0; i < live_fpu_regs.size(); i++) { if (live_fpu_regs.at(i) != cur_sim->contains(i)) { tty->print_cr("mismatch between required and actual stack content"); break; } } #endif }
bool local_is_oop(int index) { return _local_oop_map.at(index); }
inline bool ParMarkBitMap::is_obj_end(idx_t bit) const { return _end_bits.at(bit); }
inline bool ParMarkBitMap::is_obj_beg(idx_t bit) const { return _beg_bits.at(bit); }
// The given argument does not escape globally, and may be returned. bool is_arg_returned(int i) const { return !_conservative && _arg_returned.at(i); }
// The given argument escapes the callee, but does not become globally // reachable. bool is_arg_stack(int i) const { return !_conservative && _arg_stack.at(i); }
// The given argument does not escape the callee. bool is_arg_local(int i) const { return !_conservative && _arg_local.at(i); }
inline bool ValueSet::contains(Value x) { return _map.at(x->id()); }