Ejemplo n.º 1
0
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
}
Ejemplo n.º 2
0
 bool          local_is_oop(int index)          { return _local_oop_map.at(index); }
Ejemplo n.º 3
0
inline bool ParMarkBitMap::is_obj_end(idx_t bit) const
{
  return _end_bits.at(bit);
}
Ejemplo n.º 4
0
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);
 }
Ejemplo n.º 8
0
inline bool ValueSet::contains(Value x) {
  return _map.at(x->id());
}