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

📄 profile-fr500.c

📁 这个是LINUX下的GDB调度工具的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	  if (use_is_gr_complex (cpu, in_GRj))	    decrease_GR_busy (cpu, in_GRj, 1);	}      vliw_wait_for_GR (cpu, in_GRi);      vliw_wait_for_GR (cpu, in_GRj);      handle_resource_wait (cpu);      load_wait_for_GR (cpu, in_GRi);      load_wait_for_GR (cpu, in_GRj);      trace_vliw_wait_cycles (cpu);      return 0;    }  cycles = idesc->timing->units[unit_num].done;  request_cache_preload (cpu, CPU_INSN_CACHE (cpu), cycles);  return cycles;}intfrvbf_model_fr500_u_dcpl (SIM_CPU *cpu, const IDESC *idesc,			  int unit_num, int referenced,			  INT in_GRi, INT in_GRj){  int cycles;  if (model_insn == FRV_INSN_MODEL_PASS_1)    {      /* The entire VLIW insn must wait if there is a dependency on a register	 which is not ready yet.	 The latency of the registers may be less than previously recorded,	 depending on how they were used previously.	 See Table 13-8 in the LSI.  */      if (in_GRi >= 0)	{	  if (use_is_gr_complex (cpu, in_GRi))	    decrease_GR_busy (cpu, in_GRi, 1);	}      if (in_GRj != in_GRi && in_GRj >= 0)	{	  if (use_is_gr_complex (cpu, in_GRj))	    decrease_GR_busy (cpu, in_GRj, 1);	}      vliw_wait_for_GR (cpu, in_GRi);      vliw_wait_for_GR (cpu, in_GRj);      handle_resource_wait (cpu);      load_wait_for_GR (cpu, in_GRi);      load_wait_for_GR (cpu, in_GRj);      trace_vliw_wait_cycles (cpu);      return 0;    }  cycles = idesc->timing->units[unit_num].done;  request_cache_preload (cpu, CPU_DATA_CACHE (cpu), cycles);  return cycles;}intfrvbf_model_fr500_u_icul (SIM_CPU *cpu, const IDESC *idesc,			  int unit_num, int referenced,			  INT in_GRi, INT in_GRj){  int cycles;  if (model_insn == FRV_INSN_MODEL_PASS_1)    {      /* The entire VLIW insn must wait if there is a dependency on a register	 which is not ready yet.	 The latency of the registers may be less than previously recorded,	 depending on how they were used previously.	 See Table 13-8 in the LSI.  */      if (in_GRi >= 0)	{	  if (use_is_gr_complex (cpu, in_GRi))	    decrease_GR_busy (cpu, in_GRi, 1);	}      if (in_GRj != in_GRi && in_GRj >= 0)	{	  if (use_is_gr_complex (cpu, in_GRj))	    decrease_GR_busy (cpu, in_GRj, 1);	}      vliw_wait_for_GR (cpu, in_GRi);      vliw_wait_for_GR (cpu, in_GRj);      handle_resource_wait (cpu);      load_wait_for_GR (cpu, in_GRi);      load_wait_for_GR (cpu, in_GRj);      trace_vliw_wait_cycles (cpu);      return 0;    }  cycles = idesc->timing->units[unit_num].done;  request_cache_unlock (cpu, CPU_INSN_CACHE (cpu), cycles);  return cycles;}intfrvbf_model_fr500_u_dcul (SIM_CPU *cpu, const IDESC *idesc,			  int unit_num, int referenced,			  INT in_GRi, INT in_GRj){  int cycles;  if (model_insn == FRV_INSN_MODEL_PASS_1)    {      /* The entire VLIW insn must wait if there is a dependency on a register	 which is not ready yet.	 The latency of the registers may be less than previously recorded,	 depending on how they were used previously.	 See Table 13-8 in the LSI.  */      if (in_GRi >= 0)	{	  if (use_is_gr_complex (cpu, in_GRi))	    decrease_GR_busy (cpu, in_GRi, 1);	}      if (in_GRj != in_GRi && in_GRj >= 0)	{	  if (use_is_gr_complex (cpu, in_GRj))	    decrease_GR_busy (cpu, in_GRj, 1);	}      vliw_wait_for_GR (cpu, in_GRi);      vliw_wait_for_GR (cpu, in_GRj);      handle_resource_wait (cpu);      load_wait_for_GR (cpu, in_GRi);      load_wait_for_GR (cpu, in_GRj);      trace_vliw_wait_cycles (cpu);      return 0;    }  cycles = idesc->timing->units[unit_num].done;  request_cache_unlock (cpu, CPU_DATA_CACHE (cpu), cycles);  return cycles;}intfrvbf_model_fr500_u_float_arith (SIM_CPU *cpu, const IDESC *idesc,				 int unit_num, int referenced,				 INT in_FRi, INT in_FRj,				 INT in_FRdoublei, INT in_FRdoublej,				 INT out_FRk, INT out_FRdoublek){  int cycles;  FRV_PROFILE_STATE *ps;  if (model_insn == FRV_INSN_MODEL_PASS_1)    return 0;  /* The preprocessing can execute right away.  */  cycles = idesc->timing->units[unit_num].done;  /* The post processing must wait if there is a dependency on a FR     which is not ready yet.  */  adjust_float_register_busy (cpu, in_FRi, in_FRj, out_FRk, 1);  adjust_double_register_busy (cpu, in_FRdoublei, in_FRdoublej, out_FRdoublek,			       1);  ps = CPU_PROFILE_STATE (cpu);  ps->post_wait = cycles;  post_wait_for_FR (cpu, in_FRi);  post_wait_for_FR (cpu, in_FRj);  post_wait_for_FR (cpu, out_FRk);  post_wait_for_FRdouble (cpu, in_FRdoublei);  post_wait_for_FRdouble (cpu, in_FRdoublej);  post_wait_for_FRdouble (cpu, out_FRdoublek);  if (CGEN_ATTR_VALUE(idesc, idesc->attrs, CGEN_INSN_NON_EXCEPTING))    {      post_wait_for_SPR (cpu, FNER_FOR_FR (out_FRk));      post_wait_for_SPR (cpu, FNER_FOR_FR (out_FRdoublek));    }  restore_float_register_busy (cpu, in_FRi, in_FRj, out_FRk, 1);  restore_double_register_busy (cpu, in_FRdoublei, in_FRdoublej, out_FRdoublek,				1);  /* The latency of FRk will be at least the latency of the other inputs.  */  update_FR_latency (cpu, out_FRk, ps->post_wait);  update_FRdouble_latency (cpu, out_FRdoublek, ps->post_wait);  if (CGEN_ATTR_VALUE(idesc, idesc->attrs, CGEN_INSN_NON_EXCEPTING))    {      update_SPR_latency (cpu, FNER_FOR_FR (out_FRk), ps->post_wait);      update_SPR_latency (cpu, FNER_FOR_FR (out_FRdoublek), ps->post_wait);    }  /* Once initiated, post-processing will take 3 cycles.  */  update_FR_ptime (cpu, out_FRk, 3);  update_FRdouble_ptime (cpu, out_FRdoublek, 3);  if (CGEN_ATTR_VALUE(idesc, idesc->attrs, CGEN_INSN_NON_EXCEPTING))    {      update_SPR_ptime (cpu, FNER_FOR_FR (out_FRk), 3);      update_SPR_ptime (cpu, FNER_FOR_FR (out_FRdoublek), 3);    }  /* Mark this use of the register as a floating point op.  */  if (out_FRk >= 0)    set_use_is_fpop (cpu, out_FRk);  if (out_FRdoublek >= 0)    {      set_use_is_fpop (cpu, out_FRdoublek);      if (out_FRdoublek < 63)	set_use_is_fpop (cpu, out_FRdoublek + 1);    }  return cycles;}intfrvbf_model_fr500_u_float_dual_arith (SIM_CPU *cpu, const IDESC *idesc,				      int unit_num, int referenced,				      INT in_FRi, INT in_FRj,				      INT in_FRdoublei, INT in_FRdoublej,				      INT out_FRk, INT out_FRdoublek){  int cycles;  INT dual_FRi;  INT dual_FRj;  INT dual_FRk;  INT dual_FRdoublei;  INT dual_FRdoublej;  INT dual_FRdoublek;  FRV_PROFILE_STATE *ps;  if (model_insn == FRV_INSN_MODEL_PASS_1)    return 0;  /* The preprocessing can execute right away.  */  cycles = idesc->timing->units[unit_num].done;  /* The post processing must wait if there is a dependency on a FR     which is not ready yet.  */  dual_FRi = DUAL_REG (in_FRi);  dual_FRj = DUAL_REG (in_FRj);  dual_FRk = DUAL_REG (out_FRk);  dual_FRdoublei = DUAL_DOUBLE (in_FRdoublei);  dual_FRdoublej = DUAL_DOUBLE (in_FRdoublej);  dual_FRdoublek = DUAL_DOUBLE (out_FRdoublek);  adjust_float_register_busy (cpu, in_FRi, in_FRj, out_FRk, 1);  adjust_float_register_busy (cpu, dual_FRi, dual_FRj, dual_FRk, 1);  adjust_double_register_busy (cpu, in_FRdoublei, in_FRdoublej, out_FRdoublek,			       1);  adjust_double_register_busy (cpu, dual_FRdoublei, dual_FRdoublej,			       dual_FRdoublek, 1);  ps = CPU_PROFILE_STATE (cpu);  ps->post_wait = cycles;  post_wait_for_FR (cpu, in_FRi);  post_wait_for_FR (cpu, in_FRj);  post_wait_for_FR (cpu, out_FRk);  post_wait_for_FR (cpu, dual_FRi);  post_wait_for_FR (cpu, dual_FRj);  post_wait_for_FR (cpu, dual_FRk);  post_wait_for_FRdouble (cpu, in_FRdoublei);  post_wait_for_FRdouble (cpu, in_FRdoublej);  post_wait_for_FRdouble (cpu, out_FRdoublek);  post_wait_for_FRdouble (cpu, dual_FRdoublei);  post_wait_for_FRdouble (cpu, dual_FRdoublej);  post_wait_for_FRdouble (cpu, dual_FRdoublek);  if (CGEN_ATTR_VALUE(idesc, idesc->attrs, CGEN_INSN_NON_EXCEPTING))    {      post_wait_for_SPR (cpu, FNER_FOR_FR (out_FRk));      post_wait_for_SPR (cpu, FNER_FOR_FR (dual_FRk));      post_wait_for_SPR (cpu, FNER_FOR_FR (out_FRdoublek));      post_wait_for_SPR (cpu, FNER_FOR_FR (dual_FRdoublek));    }  restore_float_register_busy (cpu, in_FRi, in_FRj, out_FRk, 1);  restore_float_register_busy (cpu, dual_FRi, dual_FRj, dual_FRk, 1);  restore_double_register_busy (cpu, in_FRdoublei, in_FRdoublej, out_FRdoublek,				1);  restore_double_register_busy (cpu, dual_FRdoublei, dual_FRdoublej,				dual_FRdoublek, 1);  /* The latency of FRk will be at least the latency of the other inputs.  */  update_FR_latency (cpu, out_FRk, ps->post_wait);  update_FR_latency (cpu, dual_FRk, ps->post_wait);  update_FRdouble_latency (cpu, out_FRdoublek, ps->post_wait);  update_FRdouble_latency (cpu, dual_FRdoublek, ps->post_wait);  if (CGEN_ATTR_VALUE(idesc, idesc->attrs, CGEN_INSN_NON_EXCEPTING))    {      update_SPR_latency (cpu, FNER_FOR_FR (out_FRk), ps->post_wait);      update_SPR_latency (cpu, FNER_FOR_FR (dual_FRk), ps->post_wait);      update_SPR_latency (cpu, FNER_FOR_FR (out_FRdoublek), ps->post_wait);      update_SPR_latency (cpu, FNER_FOR_FR (dual_FRdoublek), ps->post_wait);    }  /* Once initiated, post-processing will take 3 cycles.  */  update_FR_ptime (cpu, out_FRk, 3);  update_FR_ptime (cpu, dual_FRk, 3);  update_FRdouble_ptime (cpu, out_FRdoublek, 3);  update_FRdouble_ptime (cpu, dual_FRdoublek, 3);  if (CGEN_ATTR_VALUE(idesc, idesc->attrs, CGEN_INSN_NON_EXCEPTING))    {      update_SPR_ptime (cpu, FNER_FOR_FR (out_FRk), 3);      update_SPR_ptime (cpu, FNER_FOR_FR (dual_FRk), 3);      update_SPR_ptime (cpu, FNER_FOR_FR (out_FRdoublek), 3);      update_SPR_ptime (cpu, FNER_FOR_FR (dual_FRdoublek), 3);    }  /* Mark this use of the register as a floating point op.  */  if (out_FRk >= 0)    set_use_is_fpop (cpu, out_FRk);  if (dual_FRk >= 0)    set_use_is_fpop (cpu, dual_FRk);  if (out_FRdoublek >= 0)    {      set_use_is_fpop (cpu, out_FRdoublek);      if (out_FRdoublek < 63)	set_use_is_fpop (cpu, out_FRdoublek + 1);    }  if (dual_FRdoublek >= 0)    {      set_use_is_fpop (cpu, dual_FRdoublek);      if (dual_FRdoublek < 63)	set_use_is_fpop (cpu, dual_FRdoublek + 1);    }  return cycles;}intfrvbf_model_fr500_u_float_div (SIM_CPU *cpu, const IDESC *idesc,			       int unit_num, int referenced,			       INT in_FRi, INT in_FRj, INT out_FRk){  int cycles;  FRV_VLIW *vliw;  int slot;  FRV_PROFILE_STATE *ps;  if (model_insn == FRV_INSN_MODEL_PASS_1)    return 0;  cycles = idesc->timing->units[unit_num].done;  /* The post processing must wait if there is a dependency on a FR     which is not ready yet.  */  adjust_float_register_busy (cpu, in_FRi, in_FRj, out_FRk, 1);  ps = CPU_PROFILE_STATE (cpu);  ps->post_wait = cycles;  post_wait_for_FR (cpu, in_FRi);  post_wait_for_FR (cpu, in_FRj);  post_wait_for_FR (cpu, out_FRk);  if (CGEN_ATTR_VALUE(idesc, idesc->attrs, CGEN_INSN_NON_EXCEPTING))    post_wait_for_SPR (cpu, FNER_FOR_FR (out_FRk));  vliw = CPU_VLIW (cpu);  slot = vliw->next_slot - 1;  slot = (*vliw->current_vliw)[slot] - UNIT_FM0;  post_wait_for_fdiv (cpu, slot);  restore_float_register_busy (cpu, in_FRi, in_FRj, out_FRk, 1);  /* The latency of FRk will be at least the latency of the other inputs.  */  /* Once initiated, post-processing will take 10 cycles.  */  update_FR_latency (cpu, out_FRk, ps->post_wait);  update_FR_ptime (cpu, out_FRk, 10);  if (CGEN_ATTR_VALUE(idesc, idesc->attrs, CGEN_INSN_NON_EXCEPTING))    {      /* FNER has a latency of 10 cycles.  */      update_SPR_latency (cpu, FNER_FOR_FR (out_FRk), ps->post_wait);      update_SPR_ptime (cpu, FNER_FOR_FR (out_FRk), 10);    }  /* The latency of the fdiv unit will be at least the latency of the other     inputs.  Once initiated, post-processing will take 9 cycles.  */  update_fdiv_resource_latency (cpu, slot, ps->post_wait + 9);  /* Mark this use of the register as a floating point op.  */  set_use_is_fpop (cpu, out_FRk);  return cycles;}intfrvbf_model_fr500_u_float_sqrt (SIM_CPU *cpu, const IDESC *idesc,				int unit_num, int referenced,				INT in_FRj, INT in_FRdoublej,				INT out_FRk, INT out_FRdoublek){  int cycles;  FRV_VLIW *vliw;  int slot;  FRV_PROFILE_STATE *ps;  if (model_insn == FRV_INSN_MODEL_PASS_1)    return 0;  cycles = idesc->timing->units[unit_num].done;  /* The post processing must wait if there is a dependency on a FR     which is not ready yet.  */  adjust_float_register_busy (cpu, -1, in_FRj, out_FRk, 1);  adjust_double_register_busy (cpu, -1, in_FRdoublej, out_FRdoublek, 1);  ps = CPU_PROFILE_STATE (cpu);  ps->post_wait = cycles;  post_wait_for_FR (cpu, in_FRj);  post_wait_for_FR (cpu, out_FRk);  post_wait_for_FRdouble (cpu, in_FRdoublej);  post_wait_for_FRdouble (cpu, out_FRdoublek);  if (CGEN_ATTR_VALUE(idesc, idesc->attrs, CGEN_INSN_NON_EXCEPTING))    post_wait_for_SPR (cpu, FNER_FOR_FR (out_FRk));  vliw = CPU_VLIW (cpu);  slot = vliw->next_slot - 1;  slot = (*vliw->current_vliw)[slot] - UNIT_FM0;  post_wait_for_fsqrt (cpu, slot);  restore_float_register_busy (cpu, -1, in_FRj, out_FRk, 1);  restore_double_register_busy (cpu, -1, in_FRdoublej, out_FRdoublek, 1);  /* The latency of FRk will be at least the latency of the other inputs.  */  update_FR_latency (cpu, out_FRk, ps->post_wait);  update_FRdouble_latency (cpu, out_FRdoublek, ps->post_wait);  if (CGEN_ATTR_VALUE(idesc, idesc->attrs, CGEN_INSN_NON_EXCEPTING))    update_SPR_latency (cpu, FNER_FOR_FR (out_FRk), ps->post_wait);  /* Once initiated, post-processing will take 15 cycles.  */  update_FR_ptime (cpu, out_FRk, 15);  update_FRdouble_ptime (cpu, out_FRdoublek, 15);  if (CGEN_ATTR_VALUE(idesc, idesc->attrs, CGEN_INSN_NON_EXCEPTING))    update_SPR_ptime (cpu, FNER_FOR_FR (out_FRk), 15);  /* The latency of the sqrt unit will be the latency of the other     inputs plus 14 cycles.  */  update_fsqrt_resource_latency (cpu, slot, ps->post_wait + 14);  /* Mark this use of the register as a floating point op.  */  if (out_FRk >= 0)    set_use_is_fpop (cpu, out_FRk);  if (out_FRdoublek >= 0)    {      set_use_is_fpop (cpu, out_FRdoublek);      if (out_FRdoublek < 63)	set_use_is_fpop (cpu, out_FRdoublek + 1);    }  return cycles;}intfrvbf_model_fr500_u_float_dual_sqrt (SIM_CPU *cpu, const IDESC *idesc,				     int unit_num, int referenced,				     INT in_FRj, INT out_FRk)

⌨️ 快捷键说明

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