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

📄 sem-switch.c

📁 这个是LINUX下的GDB调度工具的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
#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 = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_SRA3) : /* sra3 $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 opval = SRASI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_SRAI) : /* srai $dr,$uimm5 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_slli.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);  {    SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_SRL) : /* srl $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 = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_SRL3) : /* srl3 $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 opval = SRLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_SRLI) : /* srli $dr,$uimm5 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_slli.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);  {    SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5));    * FLD (i_dr) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_ST) : /* st $src1,@$src2 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_st_plus.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);  {    SI opval = * FLD (i_src1);    SETMEMSI (current_cpu, pc, * FLD (i_src2), opval);    TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_ST_D) : /* st $src1,@($slo16,$src2) */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_st_d.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);  {    SI opval = * FLD (i_src1);    SETMEMSI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);    TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_STB) : /* stb $src1,@$src2 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_st_plus.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);  {    QI opval = * FLD (i_src1);    SETMEMQI (current_cpu, pc, * FLD (i_src2), opval);    TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_STB_D) : /* stb $src1,@($slo16,$src2) */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_st_d.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);  {    QI opval = * FLD (i_src1);    SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);    TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_STH) : /* sth $src1,@$src2 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_st_plus.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);  {    HI opval = * FLD (i_src1);    SETMEMHI (current_cpu, pc, * FLD (i_src2), opval);    TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_STH_D) : /* sth $src1,@($slo16,$src2) */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_st_d.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);  {    HI opval = * FLD (i_src1);    SETMEMHI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);    TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_ST_PLUS) : /* st $src1,@+$src2 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_st_plus.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);{  SI tmp_new_src2;  tmp_new_src2 = ADDSI (* FLD (i_src2), 4);  {    SI opval = * FLD (i_src1);    SETMEMSI (current_cpu, pc, tmp_new_src2, opval);    TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);  }  {    SI opval = tmp_new_src2;    * FLD (i_src2) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }}#undef FLD}  NEXT (vpc);  CASE (sem, INSN_ST_MINUS) : /* st $src1,@-$src2 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_st_plus.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);{  SI tmp_new_src2;  tmp_new_src2 = SUBSI (* FLD (i_src2), 4);  {    SI opval = * FLD (i_src1);    SETMEMSI (current_cpu, pc, tmp_new_src2, opval);    TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);  }  {    SI opval = tmp_new_src2;    * FLD (i_src2) = opval;    TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);  }}#undef FLD}  NEXT (vpc);  CASE (sem, INSN_SUB) : /* sub $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 = SUBSI (* 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_SUBV) : /* subv $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 = SUBSI (* FLD (i_dr), * FLD (i_sr));  temp1 = SUBOFSI (* 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_SUBX) : /* subx $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 = SUBCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));  temp1 = SUBCFSI (* 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_TRAP) : /* trap $uimm4 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_trap.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  SEM_BRANCH_INIT  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);{  {    USI opval = GET_H_CR (((UINT) 6));    SET_H_CR (((UINT) 14), opval);    TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);  }  {    USI opval = ADDSI (pc, 4);    SET_H_CR (((UINT) 6), opval);    TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);  }  {    UQI opval = CPU (h_bpsw);    CPU (h_bbpsw) = opval;    TRACE_RESULT (current_cpu, abuf, "bbpsw", 'x', opval);  }  {    UQI opval = GET_H_PSW ();    CPU (h_bpsw) = opval;    TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);  }  {    UQI opval = ANDQI (GET_H_PSW (), 128);    SET_H_PSW (opval);    TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);  }  {    SI opval = m32r_trap (current_cpu, pc, FLD (f_uimm4));    SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);    TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);  }}  SEM_BRANCH_FINI (vpc);#undef FLD}  NEXT (vpc);  CASE (sem, INSN_UNLOCK) : /* unlock $src1,@$src2 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_st_plus.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);{if (CPU (h_lock)) {  {    SI opval = * FLD (i_src1);    SETMEMSI (current_cpu, pc, * FLD (i_src2), opval);    written |= (1 << 4);    TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);  }}  {    BI opval = 0;    CPU (h_lock) = opval;    TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);  }}  abuf->written = written;#undef FLD}  NEXT (vpc);  CASE (sem, INSN_CLRPSW) : /* clrpsw $uimm8 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_clrpsw.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);  {    SI opval = ANDSI (GET_H_CR (((UINT) 0)), ORSI (INVBI (FLD (f_uimm8)), 65280));    SET_H_CR (((UINT) 0), opval);    TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_SETPSW) : /* setpsw $uimm8 */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_clrpsw.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 2);  {    SI opval = FLD (f_uimm8);    SET_H_CR (((UINT) 0), opval);    TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_BSET) : /* bset $uimm3,@($slo16,$sr) */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_bset.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);  {    QI opval = ORQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), SLLSI (1, SUBSI (7, FLD (f_uimm3))));    SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval);    TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_BCLR) : /* bclr $uimm3,@($slo16,$sr) */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_bset.f  int UNUSED written = 0;  IADDR UNUSED pc = abuf->addr;  vpc = SEM_NEXT_VPC (sem_arg, pc, 4);  {    QI opval = ANDQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), INVQI (SLLSI (1, SUBSI (7, FLD (f_uimm3)))));    SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval);    TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);  }#undef FLD}  NEXT (vpc);  CASE (sem, INSN_BTST) : /* btst $uimm3,$sr */{  SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);  ARGBUF *abuf = SEM_ARGBUF (sem_arg);#define FLD(f) abuf->fields.sfmt_bset.f

⌨️ 快捷键说明

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