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

📄 gencode.c

📁 这个是LINUX下的GDB调度工具的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
  { "n", "nm", "swap.w <REG_M>,<REG_N>", "0110nnnnmmmm1001",    "R[n] = (((R[m] << 16) & 0xffff0000)",    "        | ((R[m] >> 16) & 0x00ffff));",  },  { "", "n", "tas.b @<REG_N>", "0100nnnn00011011",    "MA (1);",    "ult = RBAT (R[n]);",    "SET_SR_T (ult == 0);",    "WBAT (R[n],ult|0x80);",  },  { "0", "", "trapa #<imm>", "11000011i8*1....",     "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",    "long imm = 0xff & i;",    "if (i < 20 || i == 33 || i == 34 || i == 0xc3)",    "  nip += trap (i, &R0, PC, memory, maskl, maskw, endianw);",#if 0    "else {",    /* SH-[12] */    "  R[15] -= 4;",    "  WLAT (R[15], GET_SR ());",    "  R[15] -= 4;",    "  WLAT (R[15], PH2T (PC + 2));",#else    "else if (!SR_BL) {",    "  SSR = GET_SR ();",    "  SPC = PH2T (PC + 2);",    "  SET_SR (GET_SR () | SR_MASK_MD | SR_MASK_BL | SR_MASK_RB);",    "  /* FIXME: EXPEVT = 0x00000160; */",#endif    "  SET_NIP (PT2H (RLAT (VBR + (imm<<2))));",    "}",  },  { "", "mn", "tst <REG_M>,<REG_N>", "0010nnnnmmmm1000",    "SET_SR_T ((R[n] & R[m]) == 0);",  },  { "", "0", "tst #<imm>,R0", "11001000i8*1....",    "SET_SR_T ((R0 & i) == 0);",  },  { "", "0", "tst.b #<imm>,@(R0,GBR)", "11001100i8*1....",    "MA (1);",    "SET_SR_T ((RBAT (GBR+R0) & i) == 0);",  },  { "", "0", "xor #<imm>,R0", "11001010i8*1....",    "R0 ^= i;",  },  { "n", "mn", "xor <REG_M>,<REG_N>", "0010nnnnmmmm1010",    "R[n] ^= R[m];",  },  { "", "0", "xor.b #<imm>,@(R0,GBR)", "11001110i8*1....",    "MA (1);",    "ult = RBAT (GBR+R0);",    "ult ^= i;",    "WBAT (GBR + R0, ult);",  },  { "n", "nm", "xtrct <REG_M>,<REG_N>", "0010nnnnmmmm1101",    "R[n] = (((R[n] >> 16) & 0xffff)",    "        | ((R[m] << 16) & 0xffff0000));",  },#if 0  { "divs.l <REG_M>,<REG_N>", "0100nnnnmmmm1110",    "divl (0, R[n], R[m]);",  },  { "divu.l <REG_M>,<REG_N>", "0100nnnnmmmm1101",    "divl (0, R[n], R[m]);",  },#endif  {0, 0}};op movsxy_tab[] ={/* If this is disabled, the simulator speeds up by about 12% on a   450 MHz PIII - 9% with ACE_FAST.   Maybe we should have separate simulator loops?  */#if 1  { "n", "n", "movs.w @-<REG_N>,<DSP_REG_M>", "111101NNMMMM0000",    "MA (1);",    "R[n] -= 2;",    "DSP_R (m) = RSWAT (R[n]) << 16;",    "DSP_GRD (m) = SIGN32 (DSP_R (m));",  },  { "", "n",  "movs.w @<REG_N>,<DSP_REG_M>",  "111101NNMMMM0100",    "MA (1);",    "DSP_R (m) = RSWAT (R[n]) << 16;",    "DSP_GRD (m) = SIGN32 (DSP_R (m));",  },  { "n", "n", "movs.w @<REG_N>+,<DSP_REG_M>", "111101NNMMMM1000",    "MA (1);",    "DSP_R (m) = RSWAT (R[n]) << 16;",    "DSP_GRD (m) = SIGN32 (DSP_R (m));",    "R[n] += 2;",  },  { "n", "n8","movs.w @<REG_N>+REG_8,<DSP_REG_M>", "111101NNMMMM1100",    "MA (1);",    "DSP_R (m) = RSWAT (R[n]) << 16;",    "DSP_GRD (m) = SIGN32 (DSP_R (m));",    "R[n] += R[8];",  },  { "n", "n", "movs.w @-<REG_N>,<DSP_GRD_M>", "111101NNGGGG0000",    "MA (1);",    "R[n] -= 2;",    "DSP_R (m) = RSWAT (R[n]);",  },  { "", "n",  "movs.w @<REG_N>,<DSP_GRD_M>",  "111101NNGGGG0100",    "MA (1);",    "DSP_R (m) = RSWAT (R[n]);",  },  { "n", "n", "movs.w @<REG_N>+,<DSP_GRD_M>", "111101NNGGGG1000",    "MA (1);",    "DSP_R (m) = RSWAT (R[n]);",    "R[n] += 2;",  },  { "n", "n8","movs.w @<REG_N>+REG_8,<DSP_GRD_M>", "111101NNGGGG1100",    "MA (1);",    "DSP_R (m) = RSWAT (R[n]);",    "R[n] += R[8];",  },  { "n", "n", "movs.w <DSP_REG_M>,@-<REG_N>", "111101NNMMMM0001",    "MA (1);",    "R[n] -= 2;",    "WWAT (R[n], DSP_R (m) >> 16);",  },  { "", "n",  "movs.w <DSP_REG_M>,@<REG_N>",  "111101NNMMMM0101",    "MA (1);",    "WWAT (R[n], DSP_R (m) >> 16);",  },  { "n", "n", "movs.w <DSP_REG_M>,@<REG_N>+", "111101NNMMMM1001",    "MA (1);",    "WWAT (R[n], DSP_R (m) >> 16);",    "R[n] += 2;",  },  { "n", "n8","movs.w <DSP_REG_M>,@<REG_N>+REG_8", "111101NNMMMM1101",    "MA (1);",    "WWAT (R[n], DSP_R (m) >> 16);",    "R[n] += R[8];",  },  { "n", "n", "movs.w <DSP_GRD_M>,@-<REG_N>", "111101NNGGGG0001",    "MA (1);",    "R[n] -= 2;",    "WWAT (R[n], SEXT (DSP_R (m)));",  },  { "", "n",  "movs.w <DSP_GRD_M>,@<REG_N>",  "111101NNGGGG0101",    "MA (1);",    "WWAT (R[n], SEXT (DSP_R (m)));",  },  { "n", "n", "movs.w <DSP_GRD_M>,@<REG_N>+", "111101NNGGGG1001",    "MA (1);",    "WWAT (R[n], SEXT (DSP_R (m)));",    "R[n] += 2;",  },  { "n", "n8","movs.w <DSP_GRD_M>,@<REG_N>+REG_8", "111101NNGGGG1101",    "MA (1);",    "WWAT (R[n], SEXT (DSP_R (m)));",    "R[n] += R[8];",  },  { "n", "n", "movs.l @-<REG_N>,<DSP_REG_M>", "111101NNMMMM0010",    "MA (1);",    "R[n] -= 4;",    "DSP_R (m) = RLAT (R[n]);",    "DSP_GRD (m) = SIGN32 (DSP_R (m));",  },  { "", "n",  "movs.l @<REG_N>,<DSP_REG_M>",  "111101NNMMMM0110",    "MA (1);",    "DSP_R (m) = RLAT (R[n]);",    "DSP_GRD (m) = SIGN32 (DSP_R (m));",  },  { "n", "n", "movs.l @<REG_N>+,<DSP_REG_M>", "111101NNMMMM1010",    "MA (1);",    "DSP_R (m) = RLAT (R[n]);",    "DSP_GRD (m) = SIGN32 (DSP_R (m));",    "R[n] += 4;",  },  { "n", "n8","movs.l @<REG_N>+REG_8,<DSP_REG_M>", "111101NNMMMM1110",    "MA (1);",    "DSP_R (m) = RLAT (R[n]);",    "DSP_GRD (m) = SIGN32 (DSP_R (m));",    "R[n] += R[8];",  },  { "n", "n", "movs.l <DSP_REG_M>,@-<REG_N>", "111101NNMMMM0011",    "MA (1);",    "R[n] -= 4;",    "WLAT (R[n], DSP_R (m));",  },  { "", "n",  "movs.l <DSP_REG_M>,@<REG_N>",  "111101NNMMMM0111",    "MA (1);",    "WLAT (R[n], DSP_R (m));",  },  { "n", "n", "movs.l <DSP_REG_M>,@<REG_N>+", "111101NNMMMM1011",    "MA (1);",    "WLAT (R[n], DSP_R (m));",    "R[n] += 4;",  },  { "n", "n8","movs.l <DSP_REG_M>,@<REG_N>+REG_8", "111101NNMMMM1111",    "MA (1);",    "WLAT (R[n], DSP_R (m));",    "R[n] += R[8];",  },  { "n", "n", "movs.l <DSP_GRD_M>,@-<REG_N>", "111101NNGGGG0011",    "MA (1);",    "R[n] -= 4;",    "WLAT (R[n], SEXT (DSP_R (m)));",  },  { "", "n",  "movs.l <DSP_GRD_M>,@<REG_N>",  "111101NNGGGG0111",    "MA (1);",    "WLAT (R[n], SEXT (DSP_R (m)));",  },  { "n", "n", "movs.l <DSP_GRD_M>,@<REG_N>+", "111101NNGGGG1011",    "MA (1);",    "WLAT (R[n], SEXT (DSP_R (m)));",    "R[n] += 4;",  },  { "n", "n8","movs.l <DSP_GRD_M>,@<REG_N>+REG_8", "111101NNGGGG1111",    "MA (1);",    "WLAT (R[n], SEXT (DSP_R (m)));",    "R[n] += R[8];",  },  { "", "n", "movx.w @<REG_xy>,<DSP_XY>",   "111100xyXY0001??",    "DSP_R (m) = RSWAT (R[n]) << 16;",    "if (iword & 3)",    "  {",    "    iword &= 0xfd53; goto top;",    "  }",  },  { "", "n", "movx.l @<REG_xy>,<DSP_XY>",   "111100xyXY010100",    "DSP_R (m) = RLAT (R[n]);",  },  { "n", "n", "movx.w @<REG_xy>+,<DSP_XY>", "111100xyXY0010??",    "DSP_R (m) = RSWAT (R[n]) << 16;",    "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : 2;",    "if (iword & 3)",    "  {",    "    iword &= 0xfd53; goto top;",    "  }",  },  { "n", "n", "movx.l @<REG_xy>+,<DSP_XY>", "111100xyXY011000",    "DSP_R (m) = RLAT (R[n]);",    "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : 4;",  },  { "n", "n8","movx.w @<REG_xy>+REG_8,<DSP_XY>", "111100xyXY0011??",    "DSP_R (m) = RSWAT (R[n]) << 16;",    "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : R[8];",    "if (iword & 3)",    "  {",    "    iword &= 0xfd53; goto top;",    "  }",  },  { "n", "n8","movx.l @<REG_xy>+REG_8,<DSP_XY>", "111100xyXY011100",    "DSP_R (m) = RLAT (R[n]);",    "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : R[8];",  },  { "", "n", "movx.w <DSP_Ax>,@<REG_xy>",   "111100xyax1001??",    "WWAT (R[n], DSP_R (m) >> 16);",    "if (iword & 3)",    "  {",    "    iword &= 0xfd53; goto top;",    "  }",  },  { "", "n", "movx.l <DSP_Ax>,@<REG_xy>",   "111100xyax110100",    "WLAT (R[n], DSP_R (m));",  },  { "n", "n", "movx.w <DSP_Ax>,@<REG_xy>+", "111100xyax1010??",    "WWAT (R[n], DSP_R (m) >> 16);",    "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : 2;",    "if (iword & 3)",    "  {",    "    iword &= 0xfd53; goto top;",    "  }",  },  { "n", "n", "movx.l <DSP_Ax>,@<REG_xy>+", "111100xyax111000",    "WLAT (R[n], DSP_R (m));",    "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : 4;",  },  { "n", "n8","movx.w <DSP_Ax>,@<REG_xy>+REG_8","111100xyax1011??",    "WWAT (R[n], DSP_R (m) >> 16);",    "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : R[8];",    "if (iword & 3)",    "  {",    "    iword &= 0xfd53; goto top;",    "  }",  },  { "n", "n8","movx.l <DSP_Ax>,@<REG_xy>+REG_8","111100xyax111100",    "WLAT (R[n], DSP_R (m));",    "R[n] += ((R[n] & 0xffff) == MOD_ME) ? MOD_DELTA : R[8];",  },  { "", "n", "movy.w @<REG_yx>,<DSP_YX>",   "111100yxYX000001",    "DSP_R (m) = RSWAT (R[n]) << 16;",  },  { "n", "n", "movy.w @<REG_yx>+,<DSP_YX>", "111100yxYX000010",    "DSP_R (m) = RSWAT (R[n]) << 16;",    "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : 2;",  },  { "n", "n9","movy.w @<REG_yx>+REG_9,<DSP_YX>", "111100yxYX000011",    "DSP_R (m) = RSWAT (R[n]) << 16;",    "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : R[9];",  },  { "", "n", "movy.w <DSP_Ay>,@<REG_yx>",   "111100yxAY010001",    "WWAT (R[n], DSP_R (m) >> 16);",  },  { "n", "n", "movy.w <DSP_Ay>,@<REG_yx>+", "111100yxAY010010",    "WWAT (R[n], DSP_R (m) >> 16);",    "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : 2;",  },  { "n", "n9", "movy.w <DSP_Ay>,@<REG_yx>+REG_9", "111100yxAY010011",    "WWAT (R[n], DSP_R (m) >> 16);",    "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : R[9];",  },  { "", "n", "movy.l @<REG_yx>,<DSP_YX>",   "111100yxYX100001",    "DSP_R (m) = RLAT (R[n]);",  },  { "n", "n", "movy.l @<REG_yx>+,<DSP_YX>", "111100yxYX100010",    "DSP_R (m) = RLAT (R[n]);",    "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : 4;",  },  { "n", "n9","movy.l @<REG_yx>+REG_9,<DSP_YX>", "111100yxYX100011",    "DSP_R (m) = RLAT (R[n]);",    "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : R[9];",  },  { "", "n", "movy.l <DSP_Ay>,@<REG_yx>",   "111100yxAY110001",    "WLAT (R[n], DSP_R (m));",  },  { "n", "n", "movy.l <DSP_Ay>,@<REG_yx>+", "111100yxAY110010",    "WLAT (R[n], DSP_R (m));",    "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : 4;",  },  { "n", "n9", "movy.l <DSP_Ay>,@<REG_yx>+REG_9", "111100yxAY110011",    "WLAT (R[n], DSP_R (m));",    "R[n] += ((R[n] | ~0xffff) == MOD_ME) ? MOD_DELTA : R[9];",  },  { "", "", "nopx nopy", "1111000000000000",    "/* nop */",  },  { "", "", "ppi", "1111100000000000",    "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",    "ppi_insn (RIAT (nip));",    "SET_NIP (nip + 2);",    "iword &= 0xf7ff; goto top;",  },#endif  {0, 0}};op ppi_tab[] ={  { "","", "pshl #<imm>,dz",	"00000iiim16.zzzz",    "int Sz = DSP_R (z) & 0xffff0000;",    "",    "if (i <= 16)",    "  res = Sz << i;",    "else if (i >= 128 - 16)",    "  res = (unsigned) Sz >> 128 - i;	/* no sign extension */",    "else",    "  {",    "    RAISE_EXCEPTION (SIGILL);",    "    return;",    "  }",    "res &= 0xffff0000;",    "res_grd = 0;",    "goto logical;",  },  { "","", "psha #<imm>,dz",	"00010iiim32.zzzz",    "int Sz = DSP_R (z);",    "int Sz_grd = GET_DSP_GRD (z);",    "",    "if (i <= 32)",    "  {",    "    if (i == 32)",    "      {",    "        res = 0;",    "        res_grd = Sz;",    "      }",    "    else",    "      {",    "        res = Sz << i;",    "        res_grd = Sz_grd << i | (unsigned) Sz >> 32 - i;",    "      }",    "    res_grd = SEXT (res_grd);",    "    carry = res_grd & 1;",    "  }",    "else if (i >= 96)",    "  {",    "    i = 128 - i;",    "    if (i == 32)",    "      {",    "        res_grd = SIGN32 (Sz_grd);",    "        res = Sz_grd;",    "      }",    "    else",    "      {",    "        res = Sz >> i | Sz_grd << 32 - i;",    "        res_grd = Sz_grd >> i;",    "      }",    "    carry = Sz >> (i - 1) & 1;",    "  }",    "else",    "  {",    "    RAISE_EXCEPTION (SIGILL);",    "    return;",    "  }",    "COMPUTE_OVERFLOW;",    "greater_equal = 0;",  },  { "","", "pmuls Se,Sf,Dg",	"0100eeffxxyygguu",    "res = (DSP_R (e) >> 16) * (DSP_R (f) >> 16) * 2;",    "if (res == 0x80000000)",    "  res = 0x7fffffff;",    "DSP_R (g) = res;",    "DSP_GRD (g) = SIGN32 (res);",    "return;",  },  { "","", "psub Sx,Sy,Du pmuls Se,Sf,Dg",	"0110eeffxxyygguu",    "int Sx = DSP_R (x);",    "int Sx_grd = GET_DSP_GRD (x);",    "int Sy = DSP_R (y);",    "int Sy_grd = SIGN32 (Sy);",    "",    "res = (DSP_R (e) >> 16) * (DSP_R (f) >> 16) * 2;",    "if (res == 0x80000000)",    "  res = 0x7fffffff;",    "DSP_R (g) = res;",    "DSP_GRD (g) = SIGN32 (res);",    "",    "z = u;",    "res = Sx - Sy;",    "carry = (unsigned) res > (unsigned) Sx;",    "res_grd = Sx_grd - Sy_grd - carry;",    "COMPUTE_OVERFLOW;",    "ADD_SUB_GE;",  },  { "","", "padd Sx,Sy,Du pmuls Se,Sf,Dg",	"0111eeffxxyygguu",    "int Sx = DSP_R (x);",    "int Sx_grd = GET_DSP_GRD (x);",    "int Sy = DSP_R (y);",    "int Sy_grd = SIGN32 (Sy);",    "",    "res = (DSP_R (e) >> 16) * (DSP_R (f) >> 16) * 2;",    "if (res == 0x80000000)",    "  res = 0x7fffffff;",    "DSP_R (g) = res;",    "DSP_GRD (g) = SIGN32 (res);",    "",    "z = u;",    "res = Sx + Sy;",    "carry = (unsigned) res < (unsigned) Sx;",    "res_grd = Sx_grd + Sy_grd + carry;",    "COMPUTE_OVERFLOW;",  },  { "","", "psubc Sx,Sy,Dz",		"10100000xxyyzzzz",    "int Sx = DSP_R (x);",    "int Sx_grd = GET_DSP_GRD (x);",    "int Sy = DSP_R (y);",    "int Sy_grd = SIGN32 (Sy);",    "",    "res = Sx - Sy - (DSR & 1);",    "carry = (unsigned) res > (unsigned) Sx || (res == Sx && Sy);",    "res_grd = Sx_grd + Sy_grd + carry;",    "COMPUTE_OVERFLOW;",    "ADD_SUB_GE;",    "DSR &= ~0xf1;\n",    "if (res || res_grd)\n",    "  DSR |= greater_equal | res_grd >> 2 & DSR_MASK_N | overflow;\n",    "else\n",    "  DSR |= DSR_MASK_Z | overflow;\n",    "DSR |= carry;\n",    "goto assign_z;\n",  },  { "","", "paddc Sx,Sy,Dz",	"10110000xxyyzzzz",    "int Sx = DSP_R (x);",    "int Sx_grd = GET_DSP_GRD (x);",    "int Sy = DSP_R (y);",    "int Sy_grd = SIGN32 (Sy);",    "",    "res = Sx + Sy + (DSR & 1);",    "carry = (unsigned) res < (unsigned) Sx || (res == Sx && Sy);",    "res_grd = Sx_grd + Sy_grd + carry;",    "COMPUTE_OVERFLOW;",    "ADD_SUB_GE;",    "DSR &= ~0xf1;\n",    "if (res || res_grd)\n",    "  DSR |= greater_equal | res_grd >> 2 & DSR_MASK_N | overflow;\n",    "else\n",    "  DSR |= DSR_MASK_Z | overflow;\n",    "DSR |= carry;\n",    "goto assign_z;\n",  },  { "","", "pcmp Sx,Sy",	"10000100xxyyzzzz",    "int Sx = DSP_R (x);",    "int Sx_grd = GET_DSP_GRD (x);",    "int Sy = DSP_R (y);",    "int Sy_grd = SIGN32 (Sy);",

⌨️ 快捷键说明

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