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

📄 semx-switch.c

📁 这个是LINUX下的GDB调度工具的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
#else    /* FIXME: Allow provision of explicit ifmt spec in insn spec.  */    vpc = m32rxf_pbb_cti_chain (current_cpu, sem_arg,			       CPU_PBB_BR_TYPE (current_cpu),			       CPU_PBB_BR_NPC (current_cpu));#endif#endif  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_X_CHAIN) : /* --chain-- */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.fmt_empty.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 0);  {#if WITH_SCACHE_PBB_M32RXF    vpc = m32rxf_pbb_chain (current_cpu, sem_arg);#ifdef DEFINE_SWITCH    BREAK (sem);#endif#endif  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_X_BEGIN) : /* --begin-- */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.fmt_empty.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 0);  {#if WITH_SCACHE_PBB_M32RXF#if defined DEFINE_SWITCH || defined FAST_P    /* In the switch case FAST_P is a constant, allowing several optimizations       in any called inline functions.  */    vpc = m32rxf_pbb_begin (current_cpu, FAST_P);#else#if 0 /* cgen engine can't handle dynamic fast/full switching yet.  */    vpc = m32rxf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));#else    vpc = m32rxf_pbb_begin (current_cpu, 0);#endif#endif#endif  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_ADD) : /* add $dr,$sr */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_add.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);  {    SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_ADD3) : /* add3 $dr,$sr,$hash$slo16 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_add3.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);  {    SI opval = ADDSI (* FLD (i_sr), FLD (f_simm16));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_AND) : /* and $dr,$sr */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_add.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);  {    SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_AND3) : /* and3 $dr,$sr,$uimm16 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_and3.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);  {    SI opval = ANDSI (* FLD (i_sr), FLD (f_uimm16));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_OR) : /* or $dr,$sr */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_add.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);  {    SI opval = ORSI (* FLD (i_dr), * FLD (i_sr));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_OR3) : /* or3 $dr,$sr,$hash$ulo16 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_and3.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);  {    SI opval = ORSI (* FLD (i_sr), FLD (f_uimm16));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_XOR) : /* xor $dr,$sr */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_add.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);  {    SI opval = XORSI (* FLD (i_dr), * FLD (i_sr));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_XOR3) : /* xor3 $dr,$sr,$uimm16 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_and3.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);  {    SI opval = XORSI (* FLD (i_sr), FLD (f_uimm16));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_ADDI) : /* addi $dr,$simm8 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_addi.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);  {    SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_ADDV) : /* addv $dr,$sr */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_add.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);{  SI temp0;BI temp1;  temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr));  temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0);  {    SI opval = temp0;    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }  {    BI opval = temp1;    CPU (h_cond) = opval;    TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);  }}#undef FLD}  NEXT (vpc);  CASE (sem, INSN_ADDV3) : /* addv3 $dr,$sr,$simm16 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_add3.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);{  SI temp0;BI temp1;  temp0 = ADDSI (* FLD (i_sr), FLD (f_simm16));  temp1 = ADDOFSI (* FLD (i_sr), FLD (f_simm16), 0);  {    SI opval = temp0;    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }  {    BI opval = temp1;    CPU (h_cond) = opval;    TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);  }}#undef FLD}  NEXT (vpc);  CASE (sem, INSN_ADDX) : /* addx $dr,$sr */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_add.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);{  SI temp0;BI temp1;  temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));  temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));  {    SI opval = temp0;    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }  {    BI opval = temp1;    CPU (h_cond) = opval;    TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);  }}#undef FLD}  NEXT (vpc);  CASE (sem, INSN_BC8) : /* bc.s $disp8 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_bl8.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  SEM_BRANCH_INIT  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);if (CPU (h_cond)) {  {    USI opval = FLD (i_disp8);    SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);    written |= (1 << 2);    TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);  }}  abuf->written = written;  SEM_BRANCH_FINI (vpc);#undef FLD}  NEXT (vpc);  CASE (sem, INSN_BC24) : /* bc.l $disp24 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_bl24.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  SEM_BRANCH_INIT  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);if (CPU (h_cond)) {  {    USI opval = FLD (i_disp24);    SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);    written |= (1 << 2);    TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);  }}  abuf->written = written;  SEM_BRANCH_FINI (vpc);#undef FLD}  NEXT (vpc);  CASE (sem, INSN_BEQ) : /* beq $src1,$src2,$disp16 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_beq.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  SEM_BRANCH_INIT  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);if (EQSI (* FLD (i_src1), * FLD (i_src2))) {  {    USI opval = FLD (i_disp16);    SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);    written |= (1 << 3);    TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);  }}  abuf->written = written;  SEM_BRANCH_FINI (vpc);#undef FLD}  NEXT (vpc);  CASE (sem, INSN_BEQZ) : /* beqz $src2,$disp16 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_beq.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  SEM_BRANCH_INIT  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);if (EQSI (* FLD (i_src2), 0)) {  {    USI opval = FLD (i_disp16);    SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);    written |= (1 << 2);    TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);  }}  abuf->written = written;  SEM_BRANCH_FINI (vpc);#undef FLD}  NEXT (vpc);  CASE (sem, INSN_BGEZ) : /* bgez $src2,$disp16 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_beq.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  SEM_BRANCH_INIT  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);if (GESI (* FLD (i_src2), 0)) {  {    USI opval = FLD (i_disp16);    SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);    written |= (1 << 2);    TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);  }}  abuf->written = written;  SEM_BRANCH_FINI (vpc);#undef FLD}  NEXT (vpc);  CASE (sem, INSN_BGTZ) : /* bgtz $src2,$disp16 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_beq.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  SEM_BRANCH_INIT  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);if (GTSI (* FLD (i_src2), 0)) {  {    USI opval = FLD (i_disp16);    SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);    written |= (1 << 2);    TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);  }}  abuf->written = written;

⌨️ 快捷键说明

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