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

📄 gencode.c

📁 这个是LINUX下的GDB调度工具的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
    "  /* FIXME: check for nans and infinities.  */",    "  fsum += FR (v1+0) * FR (v2+0);",    "  fsum += FR (v1+1) * FR (v2+1);",    "  fsum += FR (v1+2) * FR (v2+2);",    "  fsum += FR (v1+3) * FR (v2+3);",    "  SET_FR (v1+3, fsum);",    "}",  },  /* sh2e */  { "", "", "fldi0 <FREG_N>", "1111nnnn10001101",    "SET_FR (n, (float) 0.0);",    "/* FIXME: check for DP and (n & 1) == 0?  */",  },  /* sh2e */  { "", "", "fldi1 <FREG_N>", "1111nnnn10011101",    "SET_FR (n, (float) 1.0);",    "/* FIXME: check for DP and (n & 1) == 0?  */",  },  /* sh2e */  { "", "", "flds <FREG_N>,FPUL", "1111nnnn00011101",    "  union",    "  {",    "    int i;",    "    float f;",    "  } u;",    "  u.f = FR (n);",    "  FPUL = u.i;",  },  /* sh2e */  { "", "", "float FPUL,<FREG_N>", "1111nnnn00101101",    /* sh4 */    "if (FPSCR_PR)",    "  SET_DR (n, (double) FPUL);",    "else",    "{",    "  SET_FR (n, (float) FPUL);",    "}",  },  /* sh2e */  { "", "", "fmac <FREG_0>,<FREG_M>,<FREG_N>", "1111nnnnmmmm1110",    "SET_FR (n, FR (m) * FR (0) + FR (n));",    "/* FIXME: check for DP and (n & 1) == 0? */",  },  /* sh2e */  { "", "", "fmov <FREG_M>,<FREG_N>", "1111nnnnmmmm1100",    /* sh4 */    "if (FPSCR_SZ) {",    "  int ni = XD_TO_XF (n);",    "  int mi = XD_TO_XF (m);",    "  SET_XF (ni + 0, XF (mi + 0));",    "  SET_XF (ni + 1, XF (mi + 1));",    "}",    "else",    "{",    "  SET_FR (n, FR (m));",    "}",  },  /* sh2e */  { "", "n", "fmov.s <FREG_M>,@<REG_N>", "1111nnnnmmmm1010",    /* sh4 */    "if (FPSCR_SZ) {",    "  MA (2);",    "  WDAT (R[n], m);",    "}",    "else",    "{",    "  MA (1);",    "  WLAT (R[n], FI (m));",    "}",  },  /* sh2e */  { "", "m", "fmov.s @<REG_M>,<FREG_N>", "1111nnnnmmmm1000",    /* sh4 */    "if (FPSCR_SZ) {",    "  MA (2);",    "  RDAT (R[m], n);",    "}",    "else",    "{",    "  MA (1);",    "  SET_FI (n, RLAT (R[m]));",    "}",  },  /* sh2a */  { "", "n", "fmov.s @(disp12,<REG_N>), <FREG_M>", "0011nnnnmmmm0001",    "/* and fmov.s <FREG_N>, @(disp12,<FREG_M>)",    "   and mov.bwl <REG_N>, @(disp12,<REG_M>)",    "   and mov.bwl @(disp12,<REG_N>),<REG_M>",    "   and movu.bw @(disp12,<REG_N>),<REG_M>.  */",    "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",    "int word2 = RIAT (nip);",    "SET_NIP (nip + 2);	/* Consume 2 more bytes.  */",    "MA (1);",    "do_long_move_insn (word2 & 0xf000, word2 & 0x0fff, m, n, &thislock);",  },  /* sh2e */  { "m", "m", "fmov.s @<REG_M>+,<FREG_N>", "1111nnnnmmmm1001",    /* sh4 */    "if (FPSCR_SZ) {",    "  MA (2);",    "  RDAT (R[m], n);",    "  R[m] += 8;",    "}",    "else",    "{",    "  MA (1);",    "  SET_FI (n, RLAT (R[m]));",    "  R[m] += 4;",    "}",  },  /* sh2e */  { "n", "n", "fmov.s <FREG_M>,@-<REG_N>", "1111nnnnmmmm1011",    /* sh4 */    "if (FPSCR_SZ) {",    "  MA (2);",    "  R[n] -= 8;",    "  WDAT (R[n], m);",    "}",    "else",    "{",    "  MA (1);",    "  R[n] -= 4;",    "  WLAT (R[n], FI (m));",    "}",  },  /* sh2e */  { "", "0m", "fmov.s @(R0,<REG_M>),<FREG_N>", "1111nnnnmmmm0110",    /* sh4 */    "if (FPSCR_SZ) {",    "  MA (2);",    "  RDAT (R[0]+R[m], n);",    "}",    "else",    "{",    "  MA (1);",    "  SET_FI (n, RLAT (R[0] + R[m]));",    "}",  },  /* sh2e */  { "", "0n", "fmov.s <FREG_M>,@(R0,<REG_N>)", "1111nnnnmmmm0111",    /* sh4 */    "if (FPSCR_SZ) {",    "  MA (2);",    "  WDAT (R[0]+R[n], m);",    "}",    "else",    "{",    "  MA (1);",    "  WLAT ((R[0]+R[n]), FI (m));",    "}",  },  /* sh4:      See fmov instructions above for move to/from extended fp registers.  */  /* sh2e */  { "", "", "fmul <FREG_M>,<FREG_N>", "1111nnnnmmmm0010",    "FP_OP (n, *, m);",  },  /* sh2e */  { "", "", "fneg <FREG_N>", "1111nnnn01001101",    "FP_UNARY (n, -);",  },  /* sh4a */  { "", "", "fpchg", "1111011111111101",    "SET_FPSCR (GET_FPSCR () ^ FPSCR_MASK_PR);",  },  /* sh4 */  { "", "", "frchg", "1111101111111101",    "if (FPSCR_PR)",    "  RAISE_EXCEPTION (SIGILL);",    "else if (saved_state.asregs.bfd_mach == bfd_mach_sh2a)",    "  RAISE_EXCEPTION (SIGILL);",    "else",    "  SET_FPSCR (GET_FPSCR () ^ FPSCR_MASK_FR);",  },  /* sh4 */  { "", "", "fsca", "1111eeee11111101",    "if (FPSCR_PR)",    "  RAISE_EXCEPTION (SIGILL);",    "else if (saved_state.asregs.bfd_mach == bfd_mach_sh2a)",    "  RAISE_EXCEPTION (SIGILL);",    "else",    "  {",    "    SET_FR (n, fsca_s (FPUL, &sin));",    "    SET_FR (n+1, fsca_s (FPUL, &cos));",    "  }",  },  /* sh4 */  { "", "", "fschg", "1111001111111101",    "SET_FPSCR (GET_FPSCR () ^ FPSCR_MASK_SZ);",  },  /* sh3e */  { "", "", "fsqrt <FREG_N>", "1111nnnn01101101",    "FP_UNARY (n, sqrt);",  },  /* sh4 */  { "", "", "fsrra <FREG_N>", "1111nnnn01111101",    "if (FPSCR_PR)",    "  RAISE_EXCEPTION (SIGILL);",    "else if (saved_state.asregs.bfd_mach == bfd_mach_sh2a)",    "  RAISE_EXCEPTION (SIGILL);",    "else",    "  SET_FR (n, fsrra_s (FR (n)));",  },  /* sh2e */  { "", "", "fsub <FREG_M>,<FREG_N>", "1111nnnnmmmm0001",    "FP_OP (n, -, m);",  },  /* sh2e */  { "", "", "ftrc <FREG_N>, FPUL", "1111nnnn00111101",    /* sh4 */    "if (FPSCR_PR) {",    "  if (DR (n) != DR (n)) /* NaN */",    "    FPUL = 0x80000000;",    "  else",    "    FPUL =  (int) DR (n);",    "}",    "else",    "if (FR (n) != FR (n)) /* NaN */",    "  FPUL = 0x80000000;",    "else",    "  FPUL = (int) FR (n);",  },  /* sh4 */  { "", "", "ftrv <FV_N>", "1111vv0111111101",    "if (FPSCR_PR)",    "  RAISE_EXCEPTION (SIGILL);",    "else",    "{",     "  if (saved_state.asregs.bfd_mach == bfd_mach_sh2a)",    "    RAISE_EXCEPTION (SIGILL);",    "  /* FIXME not implemented.  */",    "  printf (\"ftrv xmtrx, FV%d\\n\", v1);",    "}",   },  /* sh2e */  { "", "", "fsts FPUL,<FREG_N>", "1111nnnn00001101",    "  union",    "  {",    "    int i;",    "    float f;",    "  } u;",    "  u.i = FPUL;",    "  SET_FR (n, u.f);",  },  { "", "n", "jmp @<REG_N>", "0100nnnn00101011",    "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",    "SET_NIP (PT2H (R[n]));",    "cycles += 2;",    "Delay_Slot (PC + 2);",  },  { "", "n", "jsr @<REG_N>", "0100nnnn00001011",    "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",    "PR = PH2T (PC + 4);",    "if (~doprofile)",    "  gotcall (PR, R[n]);",    "SET_NIP (PT2H (R[n]));",    "cycles += 2;",    "Delay_Slot (PC + 2);",  },  { "", "n", "jsr/n @<REG_N>", "0100nnnn01001011",    "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",    "PR = PH2T (PC + 2);",    "if (~doprofile)",    "  gotcall (PR, R[n]);",    "SET_NIP (PT2H (R[n]));",  },  { "", "", "jsr/n @@(<disp>,TBR)", "10000011i8p4....",    "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",    "PR = PH2T (PC + 2);",    "if (~doprofile)",    "  gotcall (PR, i + TBR);",    "SET_NIP (PT2H (i + TBR));",  },  { "", "n", "ldc <REG_N>,<CREG_M>", "0100nnnnmmmm1110",    "CREG (m) = R[n];",    "/* FIXME: user mode */",  },  { "", "n", "ldc <REG_N>,SR", "0100nnnn00001110",    "SET_SR (R[n]);",    "/* FIXME: user mode */",  },  { "", "n", "ldc <REG_N>,MOD", "0100nnnn01011110",    "SET_MOD (R[n]);",  },  { "", "n", "ldc <REG_N>,DBR", "0100nnnn11111010",    "if (SR_MD)",    "  DBR = R[n]; /* priv mode */",    "else",    "  RAISE_EXCEPTION (SIGILL); /* user mode */",  },  { "", "n", "ldc <REG_N>,SGR", "0100nnnn00111010",    "if (SR_MD)",    "  SGR = R[n]; /* priv mode */",    "else",    "  RAISE_EXCEPTION (SIGILL); /* user mode */",  },  { "", "n", "ldc <REG_N>,TBR", "0100nnnn01001010",    "if (SR_MD)",	/* FIXME? */    "  TBR = R[n]; /* priv mode */",    "else",    "  RAISE_EXCEPTION (SIGILL); /* user mode */",  },  { "n", "n", "ldc.l @<REG_N>+,<CREG_M>", "0100nnnnmmmm0111",    "MA (1);",    "CREG (m) = RLAT (R[n]);",    "R[n] += 4;",    "/* FIXME: user mode */",  },  { "n", "n", "ldc.l @<REG_N>+,SR", "0100nnnn00000111",    "MA (1);",    "SET_SR (RLAT (R[n]));",    "R[n] += 4;",    "/* FIXME: user mode */",  },  { "n", "n", "ldc.l @<REG_N>+,MOD", "0100nnnn01010111",    "MA (1);",    "SET_MOD (RLAT (R[n]));",    "R[n] += 4;",  },  { "n", "n", "ldc.l @<REG_N>+,DBR", "0100nnnn11110110",    "if (SR_MD)",    "{ /* priv mode */",    "  MA (1);",    "  DBR = RLAT (R[n]);",    "  R[n] += 4;",    "}",    "else",    "  RAISE_EXCEPTION (SIGILL); /* user mode */",  },  { "n", "n", "ldc.l @<REG_N>+,SGR", "0100nnnn00110110",    "if (SR_MD)",    "{ /* priv mode */",    "  MA (1);",    "  SGR = RLAT (R[n]);",    "  R[n] += 4;",    "}",    "else",    "  RAISE_EXCEPTION (SIGILL); /* user mode */",  },  /* sh-dsp */  { "", "", "ldre @(<disp>,PC)", "10001110i8p1....",    "RE = SEXT (i) * 2 + 4 + PH2T (PC);",  },  { "", "", "ldrs @(<disp>,PC)", "10001100i8p1....",    "RS = SEXT (i) * 2 + 4 + PH2T (PC);",  },  /* sh4a */  { "", "n", "ldrc <REG_N>", "0100nnnn00110100",    "SET_RC (R[n]);",    "loop = get_loop_bounds_ext (RS, RE, memory, mem_end, maskw, endianw);",    "CHECK_INSN_PTR (insn_ptr);",    "RE |= 1;",  },  { "", "", "ldrc #<imm>", "10001010i8*1....",    "SET_RC (i);",    "loop = get_loop_bounds_ext (RS, RE, memory, mem_end, maskw, endianw);",    "CHECK_INSN_PTR (insn_ptr);",    "RE |= 1;",  },  { "", "n", "lds <REG_N>,<SREG_M>", "0100nnnnssss1010",    "SREG (m) = R[n];",  },  { "n", "n", "lds.l @<REG_N>+,<SREG_M>", "0100nnnnssss0110",    "MA (1);",    "SREG (m) = RLAT (R[n]);",    "R[n] += 4;",  },  /* sh2e / sh-dsp (lds <REG_N>,DSR) */  { "", "n", "lds <REG_N>,FPSCR", "0100nnnn01101010",    "SET_FPSCR (R[n]);",  },  /* sh2e / sh-dsp (lds.l @<REG_N>+,DSR) */  { "n", "n", "lds.l @<REG_N>+,FPSCR", "0100nnnn01100110",    "MA (1);",    "SET_FPSCR (RLAT (R[n]));",    "R[n] += 4;",  },  { "", "", "ldtlb", "0000000000111000",    "/* We don't implement cache or tlb, so this is a noop.  */",  },  { "nm", "nm", "mac.l @<REG_M>+,@<REG_N>+", "0000nnnnmmmm1111",    "macl (&R0, memory, n, m);",  },  { "nm", "nm", "mac.w @<REG_M>+,@<REG_N>+", "0100nnnnmmmm1111",    "macw (&R0, memory, n, m, endianw);",  },  { "n", "", "mov #<imm>,<REG_N>", "1110nnnni8*1....",    "R[n] = SEXT (i);",  },  { "n", "", "movi20 #<imm20>,<REG_N>", "0000nnnni8*10000",    "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",    "R[n] = ((i << 24) >> 12) | RIAT (nip);",    "SET_NIP (nip + 2);	/* Consume 2 more bytes.  */",  },  { "n", "", "movi20s #<imm20>,<REG_N>", "0000nnnni8*10001",    "RAISE_EXCEPTION_IF_IN_DELAY_SLOT ();",    "R[n] = ((((i & 0xf0) << 24) >> 12) | RIAT (nip)) << 8;",    "SET_NIP (nip + 2);	/* Consume 2 more bytes.  */",  },  { "n", "m", "mov <REG_M>,<REG_N>", "0110nnnnmmmm0011",    "R[n] = R[m];",  },  { "0", "", "mov.b @(<disp>,GBR),R0", "11000100i8*1....",    "MA (1);",    "R0 = RSBAT (i + GBR);",    "L (0);",  },  { "0", "m", "mov.b @(<disp>,<REG_M>),R0", "10000100mmmmi4*1",    "MA (1);",    "R0 = RSBAT (i + R[m]);",    "L (0);",  },  { "n", "0m", "mov.b @(R0,<REG_M>),<REG_N>", "0000nnnnmmmm1100",    "MA (1);",    "R[n] = RSBAT (R0 + R[m]);",    "L (n);",  },  { "nm", "m", "mov.b @<REG_M>+,<REG_N>", "0110nnnnmmmm0100",    "MA (1);",    "R[n] = RSBAT (R[m]);",    "R[m] += 1;",    "L (n);",  },  { "0n", "n", "mov.b @-<REG_N>,R0", "0100nnnn11001011",    "MA (1);",    "R[n] -= 1;",    "R0 = RSBAT (R[n]);",    "L (0);",  },  { "", "mn", "mov.b <REG_M>,@<REG_N>", "0010nnnnmmmm0000",    "MA (1);",    "WBAT (R[n], R[m]);",  },  { "", "0", "mov.b R0,@(<disp>,GBR)", "11000000i8*1....",    "MA (1);",    "WBAT (i + GBR, R0);",  },  { "", "m0", "mov.b R0,@(<disp>,<REG_M>)", "10000000mmmmi4*1",    "MA (1);",    "WBAT (i + R[m], R0);",  },  { "", "mn0", "mov.b <REG_M>,@(R0,<REG_N>)", "0000nnnnmmmm0100",    "MA (1);",    "WBAT (R[n] + R0, R[m]);",  },  { "n", "nm", "mov.b <REG_M>,@-<REG_N>", "0010nnnnmmmm0100",    "MA (1);",    "R[n] -= 1;",    "WBAT (R[n], R[m]);",  },  { "n", "n0", "mov.b R0,@<REG_N>+", "0100nnnn10001011",    "MA (1);",    "WBAT (R[n], R0);",    "R[n] += 1;",  },  { "n", "m", "mov.b @<REG_M>,<REG_N>", "0110nnnnmmmm0000",    "MA (1);",    "R[n] = RSBAT (R[m]);",    "L (n);",  },  { "0", "", "mov.l @(<disp>,GBR),R0", "11000110i8*4....",    "MA (1);",    "R0 = RLAT (i + GBR);",

⌨️ 快捷键说明

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