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

📄 translate.c.svn-base

📁 我们自己开发的一个OSEK操作系统!不知道可不可以?
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
    gen_store_fir(ctx, rc, 0);}static always_inline void gen_farith3 (DisasContext *ctx,                                       void (*gen_arith_fop)(void),                                       int ra, int rb, int rc){    gen_load_fir(ctx, ra, 0);    gen_load_fir(ctx, rb, 1);    (*gen_arith_fop)();    gen_store_fir(ctx, rc, 0);}static always_inline void gen_fcmov (DisasContext *ctx,                                     void (*gen_test_fop)(void),                                     int ra, int rb, int rc){    gen_load_fir(ctx, ra, 0);    gen_load_fir(ctx, rb, 1);    (*gen_test_fop)();    gen_op_cmov_fir(rc);}static always_inline void gen_fti (DisasContext *ctx,                                   void (*gen_move_fop)(void),                                   int ra, int rc){    gen_load_fir(ctx, rc, 0);    (*gen_move_fop)();    gen_store_ir(ctx, ra, 0);}static always_inline void gen_itf (DisasContext *ctx,                                   void (*gen_move_fop)(void),                                   int ra, int rc){    gen_load_ir(ctx, ra, 0);    (*gen_move_fop)();    gen_store_fir(ctx, rc, 0);}static always_inline void gen_s4addl (void){    gen_op_s4();    gen_op_addl();}static always_inline void gen_s4subl (void){    gen_op_s4();    gen_op_subl();}static always_inline void gen_s8addl (void){    gen_op_s8();    gen_op_addl();}static always_inline void gen_s8subl (void){    gen_op_s8();    gen_op_subl();}static always_inline void gen_s4addq (void){    gen_op_s4();    gen_op_addq();}static always_inline void gen_s4subq (void){    gen_op_s4();    gen_op_subq();}static always_inline void gen_s8addq (void){    gen_op_s8();    gen_op_addq();}static always_inline void gen_s8subq (void){    gen_op_s8();    gen_op_subq();}static always_inline void gen_amask (void){    gen_op_load_amask();    gen_op_bic();}static always_inline int translate_one (DisasContext *ctx, uint32_t insn){    uint32_t palcode;    int32_t disp21, disp16, disp12;    uint16_t fn11, fn16;    uint8_t opc, ra, rb, rc, sbz, fpfn, fn7, fn2, islit;    int8_t lit;    int ret;    /* Decode all instruction fields */    opc = insn >> 26;    ra = (insn >> 21) & 0x1F;    rb = (insn >> 16) & 0x1F;    rc = insn & 0x1F;    sbz = (insn >> 13) & 0x07;    islit = (insn >> 12) & 1;    lit = (insn >> 13) & 0xFF;    palcode = insn & 0x03FFFFFF;    disp21 = ((int32_t)((insn & 0x001FFFFF) << 11)) >> 11;    disp16 = (int16_t)(insn & 0x0000FFFF);    disp12 = (int32_t)((insn & 0x00000FFF) << 20) >> 20;    fn16 = insn & 0x0000FFFF;    fn11 = (insn >> 5) & 0x000007FF;    fpfn = fn11 & 0x3F;    fn7 = (insn >> 5) & 0x0000007F;    fn2 = (insn >> 5) & 0x00000003;    ret = 0;#if defined ALPHA_DEBUG_DISAS    if (logfile != NULL) {        fprintf(logfile, "opc %02x ra %d rb %d rc %d disp16 %04x\n",                opc, ra, rb, rc, disp16);    }#endif    switch (opc) {    case 0x00:        /* CALL_PAL */        if (palcode >= 0x80 && palcode < 0xC0) {            /* Unprivileged PAL call */            gen_excp(ctx, EXCP_CALL_PAL + ((palcode & 0x1F) << 6), 0);#if !defined (CONFIG_USER_ONLY)        } else if (palcode < 0x40) {            /* Privileged PAL code */            if (ctx->mem_idx & 1)                goto invalid_opc;            else                gen_excp(ctx, EXCP_CALL_PALP + ((palcode & 0x1F) << 6), 0);#endif        } else {            /* Invalid PAL call */            goto invalid_opc;        }        ret = 3;        break;    case 0x01:        /* OPC01 */        goto invalid_opc;    case 0x02:        /* OPC02 */        goto invalid_opc;    case 0x03:        /* OPC03 */        goto invalid_opc;    case 0x04:        /* OPC04 */        goto invalid_opc;    case 0x05:        /* OPC05 */        goto invalid_opc;    case 0x06:        /* OPC06 */        goto invalid_opc;    case 0x07:        /* OPC07 */        goto invalid_opc;    case 0x08:        /* LDA */        gen_load_ir(ctx, rb, 0);        gen_set_sT1(ctx, disp16);        gen_op_addq();        gen_store_ir(ctx, ra, 0);        break;    case 0x09:        /* LDAH */        gen_load_ir(ctx, rb, 0);        gen_set_sT1(ctx, disp16 << 16);        gen_op_addq();        gen_store_ir(ctx, ra, 0);        break;    case 0x0A:        /* LDBU */        if (!(ctx->amask & AMASK_BWX))            goto invalid_opc;        gen_load_mem(ctx, &gen_ldbu, ra, rb, disp16, 0);        break;    case 0x0B:        /* LDQ_U */        gen_load_mem(ctx, &gen_ldq_u, ra, rb, disp16, 1);        break;    case 0x0C:        /* LDWU */        if (!(ctx->amask & AMASK_BWX))            goto invalid_opc;        gen_load_mem(ctx, &gen_ldwu, ra, rb, disp16, 0);        break;    case 0x0D:        /* STW */        if (!(ctx->amask & AMASK_BWX))            goto invalid_opc;        gen_store_mem(ctx, &gen_stw, ra, rb, disp16, 0);        break;    case 0x0E:        /* STB */        if (!(ctx->amask & AMASK_BWX))            goto invalid_opc;        gen_store_mem(ctx, &gen_stb, ra, rb, disp16, 0);        break;    case 0x0F:        /* STQ_U */        gen_store_mem(ctx, &gen_stq_u, ra, rb, disp16, 1);        break;    case 0x10:        switch (fn7) {        case 0x00:            /* ADDL */            gen_arith3(ctx, &gen_op_addl, ra, rb, rc, islit, lit);            break;        case 0x02:            /* S4ADDL */            gen_arith3(ctx, &gen_s4addl, ra, rb, rc, islit, lit);            break;        case 0x09:            /* SUBL */            gen_arith3(ctx, &gen_op_subl, ra, rb, rc, islit, lit);            break;        case 0x0B:            /* S4SUBL */            gen_arith3(ctx, &gen_s4subl, ra, rb, rc, islit, lit);            break;        case 0x0F:            /* CMPBGE */            gen_arith3(ctx, &gen_op_cmpbge, ra, rb, rc, islit, lit);            break;        case 0x12:            /* S8ADDL */            gen_arith3(ctx, &gen_s8addl, ra, rb, rc, islit, lit);            break;        case 0x1B:            /* S8SUBL */            gen_arith3(ctx, &gen_s8subl, ra, rb, rc, islit, lit);            break;        case 0x1D:            /* CMPULT */            gen_arith3(ctx, &gen_op_cmpult, ra, rb, rc, islit, lit);            break;        case 0x20:            /* ADDQ */            gen_arith3(ctx, &gen_op_addq, ra, rb, rc, islit, lit);            break;        case 0x22:            /* S4ADDQ */            gen_arith3(ctx, &gen_s4addq, ra, rb, rc, islit, lit);            break;        case 0x29:            /* SUBQ */            gen_arith3(ctx, &gen_op_subq, ra, rb, rc, islit, lit);            break;        case 0x2B:            /* S4SUBQ */            gen_arith3(ctx, &gen_s4subq, ra, rb, rc, islit, lit);            break;        case 0x2D:            /* CMPEQ */            gen_arith3(ctx, &gen_op_cmpeq, ra, rb, rc, islit, lit);            break;        case 0x32:            /* S8ADDQ */            gen_arith3(ctx, &gen_s8addq, ra, rb, rc, islit, lit);            break;        case 0x3B:            /* S8SUBQ */            gen_arith3(ctx, &gen_s8subq, ra, rb, rc, islit, lit);            break;        case 0x3D:            /* CMPULE */            gen_arith3(ctx, &gen_op_cmpule, ra, rb, rc, islit, lit);            break;        case 0x40:            /* ADDL/V */            gen_arith3(ctx, &gen_op_addlv, ra, rb, rc, islit, lit);            break;        case 0x49:            /* SUBL/V */            gen_arith3(ctx, &gen_op_sublv, ra, rb, rc, islit, lit);            break;        case 0x4D:            /* CMPLT */            gen_arith3(ctx, &gen_op_cmplt, ra, rb, rc, islit, lit);            break;        case 0x60:            /* ADDQ/V */            gen_arith3(ctx, &gen_op_addqv, ra, rb, rc, islit, lit);            break;        case 0x69:            /* SUBQ/V */            gen_arith3(ctx, &gen_op_subqv, ra, rb, rc, islit, lit);            break;        case 0x6D:            /* CMPLE */            gen_arith3(ctx, &gen_op_cmple, ra, rb, rc, islit, lit);            break;        default:            goto invalid_opc;        }        break;    case 0x11:        switch (fn7) {        case 0x00:            /* AND */            gen_arith3(ctx, &gen_op_and, ra, rb, rc, islit, lit);            break;        case 0x08:            /* BIC */            gen_arith3(ctx, &gen_op_bic, ra, rb, rc, islit, lit);            break;        case 0x14:            /* CMOVLBS */            gen_cmov(ctx, &gen_op_cmplbs, ra, rb, rc, islit, lit);            break;        case 0x16:            /* CMOVLBC */            gen_cmov(ctx, &gen_op_cmplbc, ra, rb, rc, islit, lit);            break;        case 0x20:            /* BIS */            if (ra == rb || ra == 31 || rb == 31) {                if (ra == 31 && rc == 31) {                    /* NOP */                    gen_op_nop();                } else {                    /* MOV */                    gen_load_ir(ctx, rb, 0);                    gen_store_ir(ctx, rc, 0);                }            } else {                gen_arith3(ctx, &gen_op_bis, ra, rb, rc, islit, lit);            }            break;        case 0x24:            /* CMOVEQ */            gen_cmov(ctx, &gen_op_cmpeqz, ra, rb, rc, islit, lit);            break;        case 0x26:            /* CMOVNE */            gen_cmov(ctx, &gen_op_cmpnez, ra, rb, rc, islit, lit);            break;        case 0x28:            /* ORNOT */            gen_arith3(ctx, &gen_op_ornot, ra, rb, rc, islit, lit);            break;        case 0x40:            /* XOR */            gen_arith3(ctx, &gen_op_xor, ra, rb, rc, islit, lit);            break;        case 0x44:            /* CMOVLT */            gen_cmov(ctx, &gen_op_cmpltz, ra, rb, rc, islit, lit);            break;        case 0x46:            /* CMOVGE */            gen_cmov(ctx, &gen_op_cmpgez, ra, rb, rc, islit, lit);            break;        case 0x48:            /* EQV */            gen_arith3(ctx, &gen_op_eqv, ra, rb, rc, islit, lit);            break;        case 0x61:            /* AMASK */            gen_arith2(ctx, &gen_amask, rb, rc, islit, lit);            break;        case 0x64:            /* CMOVLE */            gen_cmov(ctx, &gen_op_cmplez, ra, rb, rc, islit, lit);            break;        case 0x66:            /* CMOVGT */            gen_cmov(ctx, &gen_op_cmpgtz, ra, rb, rc, islit, lit);            break;        case 0x6C:            /* IMPLVER */            gen_op_load_implver();            gen_store_ir(ctx, rc, 0);            break;        default:            goto invalid_opc;        }        break;    case 0x12:        switch (fn7) {        case 0x02:            /* MSKBL */            gen_arith3(ctx, &gen_op_mskbl, ra, rb, rc, islit, lit);            break;        case 0x06:            /* EXTBL */            gen_arith3(ctx, &gen_op_extbl, ra, rb, rc, islit, lit);            break;        case 0x0B:            /* INSBL */            gen_arith3(ctx, &gen_op_insbl, ra, rb, rc, islit, lit);            break;        case 0x12:            /* MSKWL */            gen_arith3(ctx, &gen_op_mskwl, ra, rb, rc, islit, lit);            break;        case 0x16:            /* EXTWL */            gen_arith3(ctx, &gen_op_extwl, ra, rb, rc, islit, lit);            break;        case 0x1B:            /* INSWL */            gen_arith3(ctx, &gen_op_inswl, ra, rb, rc, islit, lit);            break;        case 0x22:            /* MSKLL */            gen_arith3(ctx, &gen_op_mskll, ra, rb, rc, islit, lit);            break;        case 0x26:            /* EXTLL */            gen_arith3(ctx, &gen_op_extll, ra, rb, rc, islit, lit);            break;        case 0x2B:            /* INSLL */            gen_arith3(ctx, &gen_op_insll, ra, rb, rc, islit, lit);            break;        case 0x30:            /* ZAP */            gen_arith3(ctx, &gen_op_zap, ra, rb, rc, islit, lit);            break;        case 0x31:            /* ZAPNOT */            gen_arith3(ctx, &gen_op_zapnot, ra, rb, rc, islit, lit);            break;        case 0x32:            /* MSKQL */            gen_arith3(ctx, &gen_op_mskql, ra, rb, rc, islit, lit);            break;        case 0x34:            /* SRL */            gen_arith3(ctx, &gen_op_srl, ra, rb, rc, islit, lit);            break;        case 0x36:            /* EXTQL */            gen_arith3(ctx, &gen_op_extql, ra, rb, rc, islit, lit);            break;        case 0x39:            /* SLL */            gen_arith3(ctx, &gen_op_sll, ra, rb, rc, islit, lit);            break;        case 0x3B:            /* INSQL */            gen_arith3(ctx, &gen_op_insql, ra, rb, rc, islit, lit);            break;        case 0x3C:            /* SRA */            gen_arith3(ctx, &gen_op_sra, ra, rb, rc, islit, lit);            break;        case 0x52:            /* MSKWH */            gen_arith3(ctx, &gen_op_mskwh, ra, rb, rc, islit, lit);            break;        case 0x57:            /* INSWH */            gen_arith3(ctx, &gen_op_inswh, ra, rb, rc, islit, lit);            break;        case 0x5A:            /* EXTWH */            gen_arith3(ctx, &gen_op_extwh, ra, rb, rc, islit, lit);            break;        case 0x62:            /* MSKLH */            gen_arith3(ctx, &gen_op_msklh, ra, rb, rc, islit, lit);            break;        case 0x67:            /* INSLH */            gen_arith3(ctx, &gen_op_inslh, ra, rb, rc, islit, lit);            break;        case 0x6A:            /* EXTLH */            gen_arith3(ctx, &gen_op_extlh, ra, rb, rc, islit, lit);            break;        case 0x72:            /* MSKQH */            gen_arith3(ctx, &gen_op_mskqh, ra, rb, rc, islit, lit);            break;        case 0x77:            /* INSQH */            gen_arith3(ctx, &gen_op_insqh, ra, rb, rc, islit, lit);            break;        case 0x7A:            /* EXTQH */            gen_arith3(ctx, &gen_op_extqh, ra, rb, rc, islit, lit);            break;        default:            goto invalid_opc;        }        break;    case 0x13:        switch (fn7) {        case 0x00:            /* MULL */            gen_arith3(ctx, &gen_op_mull, ra, rb, rc, islit, lit);            break;        case 0x20:            /* MULQ */            gen_arith3(ctx, &gen_op_mulq, ra, rb, rc, islit, lit);            break;        case 0x30:            /* UMULH */            gen_arith3(ctx, &gen_op_umulh, ra, rb, rc, islit, lit);            break;        case 0x40:            /* MULL/V */            gen_arith3(ctx, &gen_op_mullv, ra, rb, rc, islit, lit);            break;        case 0x60:            /* MULQ/V */            gen_arith3(ctx, &gen_op_mulqv, ra, rb, rc, islit, lit);            break;        default:            goto invalid_opc;        }        break;    case 0x14:        switch (fpfn) { /* f11 & 0x3F */        case 0x04:            /* ITOFS */            if (!(ctx->amask & AMASK_FIX))                goto invalid_opc;            gen_itf(ctx, &gen_op_itofs, ra, rc);            break;

⌨️ 快捷键说明

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