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

📄 simops.c

📁 这个是LINUX下的GDB调度工具的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
voidOP_6001 (){  uint16 tmp;  uint16 addr = GPR (OP[1]);  trace_input ("ld", OP_REG_OUTPUT, OP_POSTINC, OP_VOID);  if ((addr & 1))    {      State.exception = SIG_D10V_BUS;      State.pc_changed = 1; /* Don't increment the PC. */      trace_output_void ();      return;    }  tmp = RW (addr);  SET_GPR (OP[0], tmp);  if (OP[0] != OP[1])    INC_ADDR (OP[1], 2);  trace_output_16 (tmp);}/* ld */voidOP_6000 (){  uint16 tmp;  uint16 addr = GPR (OP[1]);  trace_input ("ld", OP_REG_OUTPUT, OP_MEMREF, OP_VOID);  if ((addr & 1))    {      State.exception = SIG_D10V_BUS;      State.pc_changed = 1; /* Don't increment the PC. */      trace_output_void ();      return;    }  tmp = RW (addr);  SET_GPR (OP[0], tmp);  trace_output_16 (tmp);}/* ld */voidOP_32010000 (){  uint16 tmp;  uint16 addr = OP[1];  trace_input ("ld", OP_REG_OUTPUT, OP_MEMREF3, OP_VOID);  if ((addr & 1))    {      State.exception = SIG_D10V_BUS;      State.pc_changed = 1; /* Don't increment the PC. */      trace_output_void ();      return;    }  tmp = RW (addr);  SET_GPR (OP[0], tmp);  trace_output_16 (tmp);}/* ld2w */voidOP_31000000 (){  int32 tmp;  uint16 addr = OP[1] + GPR (OP[2]);  trace_input ("ld2w", OP_REG_OUTPUT, OP_MEMREF2, OP_VOID);  if ((addr & 1))    {      State.exception = SIG_D10V_BUS;      State.pc_changed = 1; /* Don't increment the PC. */      trace_output_void ();      return;    }  tmp = RLW (addr);  SET_GPR32 (OP[0], tmp);  trace_output_32 (tmp);}/* ld2w */voidOP_6601 (){  uint16 addr = GPR (OP[1]);  int32 tmp;  trace_input ("ld2w", OP_REG_OUTPUT, OP_POSTDEC, OP_VOID);  if ((addr & 1))    {      State.exception = SIG_D10V_BUS;      State.pc_changed = 1; /* Don't increment the PC. */      trace_output_void ();      return;    }  tmp = RLW (addr);  SET_GPR32 (OP[0], tmp);  if (OP[0] != OP[1] && ((OP[0] + 1) != OP[1]))    INC_ADDR (OP[1], -4);  trace_output_32 (tmp);}/* ld2w */voidOP_6201 (){  int32 tmp;  uint16 addr = GPR (OP[1]);  trace_input ("ld2w", OP_REG_OUTPUT, OP_POSTINC, OP_VOID);  if ((addr & 1))    {      State.exception = SIG_D10V_BUS;      State.pc_changed = 1; /* Don't increment the PC. */      trace_output_void ();      return;    }  tmp = RLW (addr);  SET_GPR32 (OP[0], tmp);  if (OP[0] != OP[1] && ((OP[0] + 1) != OP[1]))    INC_ADDR (OP[1], 4);  trace_output_32 (tmp);}/* ld2w */voidOP_6200 (){  uint16 addr = GPR (OP[1]);  int32 tmp;  trace_input ("ld2w", OP_REG_OUTPUT, OP_MEMREF, OP_VOID);  if ((addr & 1))    {      State.exception = SIG_D10V_BUS;      State.pc_changed = 1; /* Don't increment the PC. */      trace_output_void ();      return;    }  tmp = RLW (addr);  SET_GPR32 (OP[0], tmp);  trace_output_32 (tmp);}/* ld2w */voidOP_33010000 (){  int32 tmp;  uint16 addr = OP[1];  trace_input ("ld2w", OP_REG_OUTPUT, OP_MEMREF3, OP_VOID);  if ((addr & 1))    {      State.exception = SIG_D10V_BUS;      State.pc_changed = 1; /* Don't increment the PC. */      trace_output_void ();      return;    }  tmp = RLW (addr);  SET_GPR32 (OP[0], tmp);  trace_output_32 (tmp);}/* ldb */voidOP_38000000 (){  int16 tmp;  trace_input ("ldb", OP_REG_OUTPUT, OP_MEMREF2, OP_VOID);  tmp = SEXT8 (RB (OP[1] + GPR (OP[2])));  SET_GPR (OP[0], tmp);  trace_output_16 (tmp);}/* ldb */voidOP_7000 (){  int16 tmp;  trace_input ("ldb", OP_REG_OUTPUT, OP_MEMREF, OP_VOID);  tmp = SEXT8 (RB (GPR (OP[1])));  SET_GPR (OP[0], tmp);  trace_output_16 (tmp);}/* ldi.s */voidOP_4001 (){  int16 tmp;  trace_input ("ldi.s", OP_REG_OUTPUT, OP_CONSTANT4, OP_VOID);  tmp = SEXT4 (OP[1]);  SET_GPR (OP[0], tmp);  trace_output_16 (tmp);}/* ldi.l */voidOP_20000000 (){  int16 tmp;  trace_input ("ldi.l", OP_REG_OUTPUT, OP_CONSTANT16, OP_VOID);  tmp = OP[1];  SET_GPR (OP[0], tmp);  trace_output_16 (tmp);}/* ldub */voidOP_39000000 (){  int16 tmp;  trace_input ("ldub", OP_REG_OUTPUT, OP_MEMREF2, OP_VOID);  tmp = RB (OP[1] + GPR (OP[2]));  SET_GPR (OP[0], tmp);  trace_output_16 (tmp);}/* ldub */voidOP_7200 (){  int16 tmp;  trace_input ("ldub", OP_REG_OUTPUT, OP_MEMREF, OP_VOID);  tmp = RB (GPR (OP[1]));  SET_GPR (OP[0], tmp);  trace_output_16 (tmp);}/* mac */voidOP_2A00 (){  int64 tmp;  trace_input ("mac", OP_ACCUM, OP_REG, OP_REG);  tmp = SEXT40 ((int16)(GPR (OP[1])) * (int16)(GPR (OP[2])));  if (PSW_FX)    tmp = SEXT40( (tmp << 1) & MASK40);  if (PSW_ST && tmp > SEXT40(MAX32))    tmp = (MAX32);  tmp += SEXT40 (ACC (OP[0]));  if (PSW_ST)    {      if (tmp > SEXT40(MAX32))	tmp = (MAX32);      else if (tmp < SEXT40(MIN32))	tmp = (MIN32);      else	tmp = (tmp & MASK40);    }  else    tmp = (tmp & MASK40);  SET_ACC (OP[0], tmp);  trace_output_40 (tmp);}/* macsu */voidOP_1A00 (){  int64 tmp;  trace_input ("macsu", OP_ACCUM, OP_REG, OP_REG);  tmp = SEXT40 ((int16) GPR (OP[1]) * GPR (OP[2]));  if (PSW_FX)    tmp = SEXT40 ((tmp << 1) & MASK40);  tmp = ((SEXT40 (ACC (OP[0])) + tmp) & MASK40);  SET_ACC (OP[0], tmp);  trace_output_40 (tmp);}/* macu */voidOP_3A00 (){  uint64 tmp;  uint32 src1;  uint32 src2;  trace_input ("macu", OP_ACCUM, OP_REG, OP_REG);  src1 = (uint16) GPR (OP[1]);  src2 = (uint16) GPR (OP[2]);  tmp = src1 * src2;  if (PSW_FX)    tmp = (tmp << 1);  tmp = ((ACC (OP[0]) + tmp) & MASK40);  SET_ACC (OP[0], tmp);  trace_output_40 (tmp);}/* max */voidOP_2600 (){  int16 tmp;  trace_input ("max", OP_REG, OP_REG, OP_VOID);  SET_PSW_F1 (PSW_F0);  if ((int16) GPR (OP[1]) > (int16)GPR (OP[0]))    {      tmp = GPR (OP[1]);      SET_PSW_F0 (1);    }  else    {      tmp = GPR (OP[0]);      SET_PSW_F0 (0);        }  SET_GPR (OP[0], tmp);  trace_output_16 (tmp);}/* max */voidOP_3600 (){  int64 tmp;  trace_input ("max", OP_ACCUM, OP_DREG, OP_VOID);  SET_PSW_F1 (PSW_F0);  tmp = SEXT16 (GPR (OP[1])) << 16 | GPR (OP[1] + 1);  if (tmp > SEXT40 (ACC (OP[0])))    {      tmp = (tmp & MASK40);      SET_PSW_F0 (1);    }  else    {      tmp = ACC (OP[0]);      SET_PSW_F0 (0);    }  SET_ACC (OP[0], tmp);  trace_output_40 (tmp);}/* max */voidOP_3602 (){  int64 tmp;  trace_input ("max", OP_ACCUM, OP_ACCUM, OP_VOID);  SET_PSW_F1 (PSW_F0);  if (SEXT40 (ACC (OP[1])) > SEXT40 (ACC (OP[0])))    {      tmp = ACC (OP[1]);      SET_PSW_F0 (1);    }  else    {      tmp = ACC (OP[0]);      SET_PSW_F0 (0);    }  SET_ACC (OP[0], tmp);  trace_output_40 (tmp);}/* min */voidOP_2601 (){  int16 tmp;  trace_input ("min", OP_REG, OP_REG, OP_VOID);  SET_PSW_F1 (PSW_F0);  if ((int16)GPR (OP[1]) < (int16)GPR (OP[0]))    {      tmp = GPR (OP[1]);      SET_PSW_F0 (1);    }  else    {      tmp = GPR (OP[0]);      SET_PSW_F0 (0);        }  SET_GPR (OP[0], tmp);  trace_output_16 (tmp);}/* min */voidOP_3601 (){  int64 tmp;  trace_input ("min", OP_ACCUM, OP_DREG, OP_VOID);  SET_PSW_F1 (PSW_F0);  tmp = SEXT16 (GPR (OP[1])) << 16 | GPR (OP[1] + 1);  if (tmp < SEXT40(ACC (OP[0])))    {      tmp = (tmp & MASK40);      SET_PSW_F0 (1);    }  else    {      tmp = ACC (OP[0]);      SET_PSW_F0 (0);    }  SET_ACC (OP[0], tmp);  trace_output_40 (tmp);}/* min */voidOP_3603 (){  int64 tmp;  trace_input ("min", OP_ACCUM, OP_ACCUM, OP_VOID);  SET_PSW_F1 (PSW_F0);  if (SEXT40(ACC (OP[1])) < SEXT40(ACC (OP[0])))    {      tmp = ACC (OP[1]);      SET_PSW_F0 (1);    }  else    {      tmp = ACC (OP[0]);      SET_PSW_F0 (0);    }  SET_ACC (OP[0], tmp);  trace_output_40 (tmp);}/* msb */voidOP_2800 (){  int64 tmp;  trace_input ("msb", OP_ACCUM, OP_REG, OP_REG);  tmp = SEXT40 ((int16)(GPR (OP[1])) * (int16)(GPR (OP[2])));  if (PSW_FX)    tmp = SEXT40 ((tmp << 1) & MASK40);  if (PSW_ST && tmp > SEXT40(MAX32))    tmp = (MAX32);  tmp = SEXT40(ACC (OP[0])) - tmp;  if (PSW_ST)    {      if (tmp > SEXT40(MAX32))	tmp = (MAX32);      else if (tmp < SEXT40(MIN32))	tmp = (MIN32);      else	tmp = (tmp & MASK40);    }  else    {      tmp = (tmp & MASK40);    }  SET_ACC (OP[0], tmp);  trace_output_40 (tmp);}/* msbsu */voidOP_1800 (){  int64 tmp;  trace_input ("msbsu", OP_ACCUM, OP_REG, OP_REG);  tmp = SEXT40 ((int16)GPR (OP[1]) * GPR (OP[2]));  if (PSW_FX)    tmp = SEXT40( (tmp << 1) & MASK40);  tmp = ((SEXT40 (ACC (OP[0])) - tmp) & MASK40);  SET_ACC (OP[0], tmp);  trace_output_40 (tmp);}/* msbu */voidOP_3800 (){  uint64 tmp;  uint32 src1;  uint32 src2;  trace_input ("msbu", OP_ACCUM, OP_REG, OP_REG);  src1 = (uint16) GPR (OP[1]);  src2 = (uint16) GPR (OP[2]);  tmp = src1 * src2;  if (PSW_FX)    tmp = (tmp << 1);  tmp = ((ACC (OP[0]) - tmp) & MASK40);  SET_ACC (OP[0], tmp);  trace_output_40 (tmp);}/* mul */voidOP_2E00 (){  int16 tmp;  trace_input ("mul", OP_REG, OP_REG, OP_VOID);  tmp = GPR (OP[0]) * GPR (OP[1]);  SET_GPR (OP[0], tmp);  trace_output_16 (tmp);}/* mulx */voidOP_2C00 (){  int64 tmp;  trace_input ("mulx", OP_ACCUM_OUTPUT, OP_REG, OP_REG);  tmp = SEXT40 ((int16)(GPR (OP[1])) * (int16)(GPR (OP[2])));  if (PSW_FX)    tmp = SEXT40 ((tmp << 1) & MASK40);  if (PSW_ST && tmp > SEXT40(MAX32))    tmp = (MAX32);  else    tmp = (tmp & MASK40);  SET_ACC (OP[0], tmp);  trace_output_40 (tmp);}/* mulxsu */voidOP_1C00 (){  int64 tmp;  trace_input ("mulxsu", OP_ACCUM_OUTPUT, OP_REG, OP_REG);  tmp = SEXT40 ((int16)(GPR (OP[1])) * GPR (OP[2]));  if (PSW_FX)    tmp <<= 1;  tmp = (tmp & MASK40);  SET_ACC (OP[0], tmp);  trace_output_40 (tmp);}/* mulxu */voidOP_3C00 (){  uint64 tmp;  uint32 src1;  uint32 src2;  trace_input ("mulxu", OP_ACCUM_OUTPUT, OP_REG, OP_REG);  src1 = (uint16) GPR (OP[1]);  src2 = (uint16) GPR (OP[2]);  tmp = src1 * src2;  if (PSW_FX)    tmp <<= 1;  tmp = (tmp & MASK40);  SET_ACC (OP[0], tmp);  trace_output_40 (tmp);}/* mv */voidOP_4000 (){  int16 tmp;  trace_input ("mv", OP_REG_OUTPUT, OP_REG, OP_VOID);  tmp = GPR (OP[1]);  SET_GPR (OP[0], tmp);  trace_output_16 (tmp);}/* mv2w */voidOP_5000 (){  int32 tmp;  trace_input ("mv2w", OP_DREG_OUTPUT, OP_DREG, OP_VOID);  tmp = GPR32 (OP[1]);  SET_GPR32 (OP[0], tmp);  trace_output_32 (tmp);}/* mv2wfac */voidOP_3E00 (){  int32 tmp;  trace_input ("mv2wfac", OP_DREG_OUTPUT, OP_ACCUM, OP_VOID);  tmp = ACC (OP[1]);  SET_GPR32 (OP[0], tmp);  trace_output_32 (tmp);}/* mv2wtac */voidOP_3E01 (){  int64 tmp;  trace_input ("mv2wtac", OP_DREG, OP_ACCUM_OUTPUT, OP_VOID);  tmp = ((SEXT16 (GPR (OP[0])) << 16 | GPR (OP[0] + 1)) & MASK40);  SET_ACC (OP[1], tmp);  trace_output_40 (tmp);}/* mvac */voidOP_3E03 (){  int64 tmp;  trace_input ("mvac", OP_ACCUM_OUTPUT, OP_ACCUM, OP_VOID);  tmp = ACC (OP[1]);  SET_ACC (OP[0], tmp);  trace_output_40 (tmp);}/* mvb */voidOP_5400 (){  int16 tmp;  trace_input ("mvb", OP_REG_OUTPUT, OP_REG, OP_VOID);  tmp = SEXT8 (GPR (OP[1]) & 0xff);  SET_GPR (OP[0], tmp);  trace_output_16 (tmp);}/* mvf0f */voidOP_4400 (){  int16 tmp;  trace_input ("mvf0f", OP_REG_OUTPUT, OP_REG, OP_VOID);  if (PSW_F0 == 0)    {      tmp = GPR (OP[1]);      SET_GPR (OP[0], tmp);    }  else    tmp = GPR (OP[0]);  trace_output_16 (tmp);}/* mvf0t */voidOP_4401 (){  int16 tmp;  trace_input ("mvf0t", OP_REG_OUTPUT, OP_REG, OP_VOID);  if (PSW_F0)    {      tmp = GPR (OP[1]);      SET_GPR (OP[0], tmp);    }  else    tmp = GPR (OP[0]);  trace_output_16 (tmp);}/* mvfacg */voidOP_1E04 (){  int16 tmp;  trace_input ("mvfacg", OP_REG_OUTPUT, OP_ACCUM, OP_VOID);  tmp = ((ACC (OP[1]) >> 32) & 0xff);  SET_GPR (OP[0], tmp);  trace_output_16 (tmp);}/* mvfachi */voidOP_1E00 (){  int16 tmp;  trace_input ("mvfachi", OP_REG_OUTPUT, OP_ACCUM, OP_VOID);  tmp = (ACC (OP[1]) >> 16);    SET_GPR (OP[0], tmp);    trace_output_16 (tmp);}/* mvfaclo */voidOP_1E02 (){  int16 tmp;

⌨️ 快捷键说明

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