⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tc-ia64.c

📁 基于4个mips核的noc设计
💻 C
📖 第 1 页 / 共 5 页
字号:
}static unw_rec_list *output_bsp_when (){  unw_rec_list *ptr = alloc_record (bsp_when);  return ptr;}static unw_rec_list *output_bsp_gr (gr)     unsigned int gr;{  unw_rec_list *ptr = alloc_record (bsp_gr);  ptr->r.record.p.gr = gr;  return ptr;}static unw_rec_list *output_bsp_psprel (offset)     unsigned int offset;{  unw_rec_list *ptr = alloc_record (bsp_psprel);  ptr->r.record.p.pspoff = offset / 4;  return ptr;}static unw_rec_list *output_bsp_sprel (offset)     unsigned int offset;{  unw_rec_list *ptr = alloc_record (bsp_sprel);  ptr->r.record.p.spoff = offset / 4;  return ptr;}static unw_rec_list *output_bspstore_when (){  unw_rec_list *ptr = alloc_record (bspstore_when);  return ptr;}static unw_rec_list *output_bspstore_gr (gr)     unsigned int gr;{  unw_rec_list *ptr = alloc_record (bspstore_gr);  ptr->r.record.p.gr = gr;  return ptr;}static unw_rec_list *output_bspstore_psprel (offset)     unsigned int offset;{  unw_rec_list *ptr = alloc_record (bspstore_psprel);  ptr->r.record.p.pspoff = offset / 4;  return ptr;}static unw_rec_list *output_bspstore_sprel (offset)     unsigned int offset;{  unw_rec_list *ptr = alloc_record (bspstore_sprel);  ptr->r.record.p.spoff = offset / 4;  return ptr;}static unw_rec_list *output_rnat_when (){  unw_rec_list *ptr = alloc_record (rnat_when);  return ptr;}static unw_rec_list *output_rnat_gr (gr)     unsigned int gr;{  unw_rec_list *ptr = alloc_record (rnat_gr);  ptr->r.record.p.gr = gr;  return ptr;}static unw_rec_list *output_rnat_psprel (offset)     unsigned int offset;{  unw_rec_list *ptr = alloc_record (rnat_psprel);  ptr->r.record.p.pspoff = offset / 4;  return ptr;}static unw_rec_list *output_rnat_sprel (offset)     unsigned int offset;{  unw_rec_list *ptr = alloc_record (rnat_sprel);  ptr->r.record.p.spoff = offset / 4;  return ptr;}static unw_rec_list *output_unwabi (abi, context)     unsigned long abi;     unsigned long context;{  unw_rec_list *ptr = alloc_record (unwabi);  ptr->r.record.p.abi = abi;  ptr->r.record.p.context = context;  return ptr;}static unw_rec_list *output_epilogue (unsigned long ecount){  unw_rec_list *ptr = alloc_record (epilogue);  ptr->r.record.b.ecount = ecount;  return ptr;}static unw_rec_list *output_label_state (unsigned long label){  unw_rec_list *ptr = alloc_record (label_state);  ptr->r.record.b.label = label;  return ptr;}static unw_rec_list *output_copy_state (unsigned long label){  unw_rec_list *ptr = alloc_record (copy_state);  ptr->r.record.b.label = label;  return ptr;}static unw_rec_list *output_spill_psprel (ab, reg, offset)     unsigned int ab;     unsigned int reg;     unsigned int offset;{  unw_rec_list *ptr = alloc_record (spill_psprel);  ptr->r.record.x.ab = ab;  ptr->r.record.x.reg = reg;  ptr->r.record.x.pspoff = offset / 4;  return ptr;}static unw_rec_list *output_spill_sprel (ab, reg, offset)     unsigned int ab;     unsigned int reg;     unsigned int offset;{  unw_rec_list *ptr = alloc_record (spill_sprel);  ptr->r.record.x.ab = ab;  ptr->r.record.x.reg = reg;  ptr->r.record.x.spoff = offset / 4;  return ptr;}static unw_rec_list *output_spill_psprel_p (ab, reg, offset, predicate)     unsigned int ab;     unsigned int reg;     unsigned int offset;     unsigned int predicate;{  unw_rec_list *ptr = alloc_record (spill_psprel_p);  ptr->r.record.x.ab = ab;  ptr->r.record.x.reg = reg;  ptr->r.record.x.pspoff = offset / 4;  ptr->r.record.x.qp = predicate;  return ptr;}static unw_rec_list *output_spill_sprel_p (ab, reg, offset, predicate)     unsigned int ab;     unsigned int reg;     unsigned int offset;     unsigned int predicate;{  unw_rec_list *ptr = alloc_record (spill_sprel_p);  ptr->r.record.x.ab = ab;  ptr->r.record.x.reg = reg;  ptr->r.record.x.spoff = offset / 4;  ptr->r.record.x.qp = predicate;  return ptr;}static unw_rec_list *output_spill_reg (ab, reg, targ_reg, xy)     unsigned int ab;     unsigned int reg;     unsigned int targ_reg;     unsigned int xy;{  unw_rec_list *ptr = alloc_record (spill_reg);  ptr->r.record.x.ab = ab;  ptr->r.record.x.reg = reg;  ptr->r.record.x.treg = targ_reg;  ptr->r.record.x.xy = xy;  return ptr;}static unw_rec_list *output_spill_reg_p (ab, reg, targ_reg, xy, predicate)     unsigned int ab;     unsigned int reg;     unsigned int targ_reg;     unsigned int xy;     unsigned int predicate;{  unw_rec_list *ptr = alloc_record (spill_reg_p);  ptr->r.record.x.ab = ab;  ptr->r.record.x.reg = reg;  ptr->r.record.x.treg = targ_reg;  ptr->r.record.x.xy = xy;  ptr->r.record.x.qp = predicate;  return ptr;}/* Given a unw_rec_list process the correct format with the   specified function.  */static voidprocess_one_record (ptr, f)     unw_rec_list *ptr;     vbyte_func f;{  unsigned long fr_mask, gr_mask;  switch (ptr->r.type)    {    case gr_mem:    case fr_mem:    case br_mem:    case frgr_mem:      /* These are taken care of by prologue/prologue_gr.  */      break;    case prologue_gr:    case prologue:      if (ptr->r.type == prologue_gr)	output_R2_format (f, ptr->r.record.r.grmask,			  ptr->r.record.r.grsave, ptr->r.record.r.rlen);      else	output_R1_format (f, ptr->r.type, ptr->r.record.r.rlen);      /* Output descriptor(s) for union of register spills (if any).  */      gr_mask = ptr->r.record.r.mask.gr_mem;      fr_mask = ptr->r.record.r.mask.fr_mem;      if (fr_mask)	{	  if ((fr_mask & ~0xfUL) == 0)	    output_P6_format (f, fr_mem, fr_mask);	  else	    {	      output_P5_format (f, gr_mask, fr_mask);	      gr_mask = 0;	    }	}      if (gr_mask)	output_P6_format (f, gr_mem, gr_mask);      if (ptr->r.record.r.mask.br_mem)	output_P1_format (f, ptr->r.record.r.mask.br_mem);      /* output imask descriptor if necessary:  */      if (ptr->r.record.r.mask.i)	output_P4_format (f, ptr->r.record.r.mask.i,			  ptr->r.record.r.imask_size);      break;    case body:      output_R1_format (f, ptr->r.type, ptr->r.record.r.rlen);      break;    case mem_stack_f:    case mem_stack_v:      output_P7_format (f, ptr->r.type, ptr->r.record.p.t,			ptr->r.record.p.size);      break;    case psp_gr:    case rp_gr:    case pfs_gr:    case preds_gr:    case unat_gr:    case lc_gr:    case fpsr_gr:    case priunat_gr:    case bsp_gr:    case bspstore_gr:    case rnat_gr:      output_P3_format (f, ptr->r.type, ptr->r.record.p.gr);      break;    case rp_br:      output_P3_format (f, rp_br, ptr->r.record.p.br);      break;    case psp_sprel:      output_P7_format (f, psp_sprel, ptr->r.record.p.spoff, 0);      break;    case rp_when:    case pfs_when:    case preds_when:    case unat_when:    case lc_when:    case fpsr_when:      output_P7_format (f, ptr->r.type, ptr->r.record.p.t, 0);      break;    case rp_psprel:    case pfs_psprel:    case preds_psprel:    case unat_psprel:    case lc_psprel:    case fpsr_psprel:    case spill_base:      output_P7_format (f, ptr->r.type, ptr->r.record.p.pspoff, 0);      break;    case rp_sprel:    case pfs_sprel:    case preds_sprel:    case unat_sprel:    case lc_sprel:    case fpsr_sprel:    case priunat_sprel:    case bsp_sprel:    case bspstore_sprel:    case rnat_sprel:      output_P8_format (f, ptr->r.type, ptr->r.record.p.spoff);      break;    case gr_gr:      output_P9_format (f, ptr->r.record.p.grmask, ptr->r.record.p.gr);      break;    case br_gr:      output_P2_format (f, ptr->r.record.p.brmask, ptr->r.record.p.gr);      break;    case spill_mask:      as_bad ("spill_mask record unimplemented.");      break;    case priunat_when_gr:    case priunat_when_mem:    case bsp_when:    case bspstore_when:    case rnat_when:      output_P8_format (f, ptr->r.type, ptr->r.record.p.t);      break;    case priunat_psprel:    case bsp_psprel:    case bspstore_psprel:    case rnat_psprel:      output_P8_format (f, ptr->r.type, ptr->r.record.p.pspoff);      break;    case unwabi:      output_P10_format (f, ptr->r.record.p.abi, ptr->r.record.p.context);      break;    case epilogue:      output_B3_format (f, ptr->r.record.b.ecount, ptr->r.record.b.t);      break;    case label_state:    case copy_state:      output_B4_format (f, ptr->r.type, ptr->r.record.b.label);      break;    case spill_psprel:      output_X1_format (f, ptr->r.type, ptr->r.record.x.ab,			ptr->r.record.x.reg, ptr->r.record.x.t,			ptr->r.record.x.pspoff);      break;    case spill_sprel:      output_X1_format (f, ptr->r.type, ptr->r.record.x.ab,			ptr->r.record.x.reg, ptr->r.record.x.t,			ptr->r.record.x.spoff);      break;    case spill_reg:      output_X2_format (f, ptr->r.record.x.ab, ptr->r.record.x.reg,			ptr->r.record.x.xy >> 1, ptr->r.record.x.xy,			ptr->r.record.x.treg, ptr->r.record.x.t);      break;    case spill_psprel_p:      output_X3_format (f, ptr->r.type, ptr->r.record.x.qp,			ptr->r.record.x.ab, ptr->r.record.x.reg,			ptr->r.record.x.t, ptr->r.record.x.pspoff);      break;    case spill_sprel_p:      output_X3_format (f, ptr->r.type, ptr->r.record.x.qp,			ptr->r.record.x.ab, ptr->r.record.x.reg,			ptr->r.record.x.t, ptr->r.record.x.spoff);      break;    case spill_reg_p:      output_X4_format (f, ptr->r.record.x.qp, ptr->r.record.x.ab,			ptr->r.record.x.reg, ptr->r.record.x.xy >> 1,			ptr->r.record.x.xy, ptr->r.record.x.treg,			ptr->r.record.x.t);      break;    default:      as_bad ("record_type_not_valid");      break;    }}/* Given a unw_rec_list list, process all the records with   the specified function.  */static voidprocess_unw_records (list, f)     unw_rec_list *list;     vbyte_func f;{  unw_rec_list *ptr;  for (ptr = list; ptr; ptr = ptr->next)    process_one_record (ptr, f);}/* Determine the size of a record list in bytes.  */static intcalc_record_size (list)     unw_rec_list *list;{  vbyte_count = 0;  process_unw_records (list, count_output);  return vbyte_count;}/* Update IMASK bitmask to reflect the fact that one or more registers   of type TYPE are saved starting at instruction with index T.  If N   bits are set in REGMASK, it is assumed that instructions T through   T+N-1 save these registers.   TYPE values:	0: no save	1: instruction saves next fp reg	2: instruction saves next general reg	3: instruction saves next branch reg */static voidset_imask (region, regmask, t, type)     unw_rec_list *region;     unsigned long regmask;     unsigned long t;     unsigned int type;{  unsigned char *imask;  unsigned long imask_size;  unsigned int i;  int pos;  imask = region->r.record.r.mask.i;  imask_size = region->r.record.r.imask_size;  if (!imask)    {      imask_size = (region->r.record.r.rlen * 2 + 7) / 8 + 1;      imask = xmalloc (imask_size);      memset (imask, 0, imask_size);      region->r.record.r.imask_size = imask_size;      region->r.record.r.mask.i = imask;    }  i = (t / 4) + 1;  pos = 2 * (3 - t % 4);  while (regmask)    {      if (i >= imask_size)	{	  as_bad ("Ignoring attempt to spill beyond end of region");	  return;	}      imask[i] |= (type & 0x3) << pos;      regmask &= (regmask - 1);      pos -= 2;      if (pos < 0)	{	  pos = 0;	  ++i;	}    }}static intcount_bits (unsigned long mask){  int n = 0;  while (mask)    {      mask &= mask - 1;      ++n;    }  return n;}/* Return the number of instruction slots from FIRST_ADDR to SLOT_ADDR.   SLOT_FRAG is the frag containing SLOT_ADDR, and FIRST_FRAG is the frag   containing FIRST_ADDR.  */unsigned longslot_i

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -