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

📄 translate.c.svn-base

📁 我们自己开发的一个OSEK操作系统!不知道可不可以?
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
        case 0x0A:            /* SQRTF */            if (!(ctx->amask & AMASK_FIX))                goto invalid_opc;            gen_farith2(ctx, &gen_op_sqrtf, rb, rc);            break;        case 0x0B:            /* SQRTS */            if (!(ctx->amask & AMASK_FIX))                goto invalid_opc;            gen_farith2(ctx, &gen_op_sqrts, rb, rc);            break;        case 0x14:            /* ITOFF */            if (!(ctx->amask & AMASK_FIX))                goto invalid_opc;#if 0 // TODO            gen_itf(ctx, &gen_op_itoff, ra, rc);#else            goto invalid_opc;#endif            break;        case 0x24:            /* ITOFT */            if (!(ctx->amask & AMASK_FIX))                goto invalid_opc;            gen_itf(ctx, &gen_op_itoft, ra, rc);            break;        case 0x2A:            /* SQRTG */            if (!(ctx->amask & AMASK_FIX))                goto invalid_opc;            gen_farith2(ctx, &gen_op_sqrtg, rb, rc);            break;        case 0x02B:            /* SQRTT */            if (!(ctx->amask & AMASK_FIX))                goto invalid_opc;            gen_farith2(ctx, &gen_op_sqrtt, rb, rc);            break;        default:            goto invalid_opc;        }        break;    case 0x15:        /* VAX floating point */        /* XXX: rounding mode and trap are ignored (!) */        switch (fpfn) { /* f11 & 0x3F */        case 0x00:            /* ADDF */            gen_farith3(ctx, &gen_op_addf, ra, rb, rc);            break;        case 0x01:            /* SUBF */            gen_farith3(ctx, &gen_op_subf, ra, rb, rc);            break;        case 0x02:            /* MULF */            gen_farith3(ctx, &gen_op_mulf, ra, rb, rc);            break;        case 0x03:            /* DIVF */            gen_farith3(ctx, &gen_op_divf, ra, rb, rc);            break;        case 0x1E:            /* CVTDG */#if 0 // TODO            gen_farith2(ctx, &gen_op_cvtdg, rb, rc);#else            goto invalid_opc;#endif            break;        case 0x20:            /* ADDG */            gen_farith3(ctx, &gen_op_addg, ra, rb, rc);            break;        case 0x21:            /* SUBG */            gen_farith3(ctx, &gen_op_subg, ra, rb, rc);            break;        case 0x22:            /* MULG */            gen_farith3(ctx, &gen_op_mulg, ra, rb, rc);            break;        case 0x23:            /* DIVG */            gen_farith3(ctx, &gen_op_divg, ra, rb, rc);            break;        case 0x25:            /* CMPGEQ */            gen_farith3(ctx, &gen_op_cmpgeq, ra, rb, rc);            break;        case 0x26:            /* CMPGLT */            gen_farith3(ctx, &gen_op_cmpglt, ra, rb, rc);            break;        case 0x27:            /* CMPGLE */            gen_farith3(ctx, &gen_op_cmpgle, ra, rb, rc);            break;        case 0x2C:            /* CVTGF */            gen_farith2(ctx, &gen_op_cvtgf, rb, rc);            break;        case 0x2D:            /* CVTGD */#if 0 // TODO            gen_farith2(ctx, &gen_op_cvtgd, rb, rc);#else            goto invalid_opc;#endif            break;        case 0x2F:            /* CVTGQ */            gen_farith2(ctx, &gen_op_cvtgq, rb, rc);            break;        case 0x3C:            /* CVTQF */            gen_farith2(ctx, &gen_op_cvtqf, rb, rc);            break;        case 0x3E:            /* CVTQG */            gen_farith2(ctx, &gen_op_cvtqg, rb, rc);            break;        default:            goto invalid_opc;        }        break;    case 0x16:        /* IEEE floating-point */        /* XXX: rounding mode and traps are ignored (!) */        switch (fpfn) { /* f11 & 0x3F */        case 0x00:            /* ADDS */            gen_farith3(ctx, &gen_op_adds, ra, rb, rc);            break;        case 0x01:            /* SUBS */            gen_farith3(ctx, &gen_op_subs, ra, rb, rc);            break;        case 0x02:            /* MULS */            gen_farith3(ctx, &gen_op_muls, ra, rb, rc);            break;        case 0x03:            /* DIVS */            gen_farith3(ctx, &gen_op_divs, ra, rb, rc);            break;        case 0x20:            /* ADDT */            gen_farith3(ctx, &gen_op_addt, ra, rb, rc);            break;        case 0x21:            /* SUBT */            gen_farith3(ctx, &gen_op_subt, ra, rb, rc);            break;        case 0x22:            /* MULT */            gen_farith3(ctx, &gen_op_mult, ra, rb, rc);            break;        case 0x23:            /* DIVT */            gen_farith3(ctx, &gen_op_divt, ra, rb, rc);            break;        case 0x24:            /* CMPTUN */            gen_farith3(ctx, &gen_op_cmptun, ra, rb, rc);            break;        case 0x25:            /* CMPTEQ */            gen_farith3(ctx, &gen_op_cmpteq, ra, rb, rc);            break;        case 0x26:            /* CMPTLT */            gen_farith3(ctx, &gen_op_cmptlt, ra, rb, rc);            break;        case 0x27:            /* CMPTLE */            gen_farith3(ctx, &gen_op_cmptle, ra, rb, rc);            break;        case 0x2C:            /* XXX: incorrect */            if (fn11 == 0x2AC) {                /* CVTST */                gen_farith2(ctx, &gen_op_cvtst, rb, rc);            } else {                /* CVTTS */                gen_farith2(ctx, &gen_op_cvtts, rb, rc);            }            break;        case 0x2F:            /* CVTTQ */            gen_farith2(ctx, &gen_op_cvttq, rb, rc);            break;        case 0x3C:            /* CVTQS */            gen_farith2(ctx, &gen_op_cvtqs, rb, rc);            break;        case 0x3E:            /* CVTQT */            gen_farith2(ctx, &gen_op_cvtqt, rb, rc);            break;        default:            goto invalid_opc;        }        break;    case 0x17:        switch (fn11) {        case 0x010:            /* CVTLQ */            gen_farith2(ctx, &gen_op_cvtlq, rb, rc);            break;        case 0x020:            /* CPYS */            if (ra == rb) {                if (ra == 31 && rc == 31) {                    /* FNOP */                    gen_op_nop();                } else {                    /* FMOV */                    gen_load_fir(ctx, rb, 0);                    gen_store_fir(ctx, rc, 0);                }            } else {                gen_farith3(ctx, &gen_op_cpys, ra, rb, rc);            }            break;        case 0x021:            /* CPYSN */            gen_farith2(ctx, &gen_op_cpysn, rb, rc);            break;        case 0x022:            /* CPYSE */            gen_farith2(ctx, &gen_op_cpyse, rb, rc);            break;        case 0x024:            /* MT_FPCR */            gen_load_fir(ctx, ra, 0);            gen_op_store_fpcr();            break;        case 0x025:            /* MF_FPCR */            gen_op_load_fpcr();            gen_store_fir(ctx, ra, 0);            break;        case 0x02A:            /* FCMOVEQ */            gen_fcmov(ctx, &gen_op_cmpfeq, ra, rb, rc);            break;        case 0x02B:            /* FCMOVNE */            gen_fcmov(ctx, &gen_op_cmpfne, ra, rb, rc);            break;        case 0x02C:            /* FCMOVLT */            gen_fcmov(ctx, &gen_op_cmpflt, ra, rb, rc);            break;        case 0x02D:            /* FCMOVGE */            gen_fcmov(ctx, &gen_op_cmpfge, ra, rb, rc);            break;        case 0x02E:            /* FCMOVLE */            gen_fcmov(ctx, &gen_op_cmpfle, ra, rb, rc);            break;        case 0x02F:            /* FCMOVGT */            gen_fcmov(ctx, &gen_op_cmpfgt, ra, rb, rc);            break;        case 0x030:            /* CVTQL */            gen_farith2(ctx, &gen_op_cvtql, rb, rc);            break;        case 0x130:            /* CVTQL/V */            gen_farith2(ctx, &gen_op_cvtqlv, rb, rc);            break;        case 0x530:            /* CVTQL/SV */            gen_farith2(ctx, &gen_op_cvtqlsv, rb, rc);            break;        default:            goto invalid_opc;        }        break;    case 0x18:        switch ((uint16_t)disp16) {        case 0x0000:            /* TRAPB */            /* No-op. Just exit from the current tb */            ret = 2;            break;        case 0x0400:            /* EXCB */            /* No-op. Just exit from the current tb */            ret = 2;            break;        case 0x4000:            /* MB */            /* No-op */            break;        case 0x4400:            /* WMB */            /* No-op */            break;        case 0x8000:            /* FETCH */            /* No-op */            break;        case 0xA000:            /* FETCH_M */            /* No-op */            break;        case 0xC000:            /* RPCC */            gen_op_load_pcc();            gen_store_ir(ctx, ra, 0);            break;        case 0xE000:            /* RC */            gen_op_load_irf();            gen_store_ir(ctx, ra, 0);            gen_op_clear_irf();            break;        case 0xE800:            /* ECB */            /* XXX: TODO: evict tb cache at address rb */#if 0            ret = 2;#else            goto invalid_opc;#endif            break;        case 0xF000:            /* RS */            gen_op_load_irf();            gen_store_ir(ctx, ra, 0);            gen_op_set_irf();            break;        case 0xF800:            /* WH64 */            /* No-op */            break;        default:            goto invalid_opc;        }        break;    case 0x19:        /* HW_MFPR (PALcode) */#if defined (CONFIG_USER_ONLY)        goto invalid_opc;#else        if (!ctx->pal_mode)            goto invalid_opc;        gen_op_mfpr(insn & 0xFF);        gen_store_ir(ctx, ra, 0);        break;#endif    case 0x1A:        gen_load_ir(ctx, rb, 0);        if (ra != 31) {            gen_set_uT1(ctx, ctx->pc);            gen_store_ir(ctx, ra, 1);        }        gen_op_branch();        /* Those four jumps only differ by the branch prediction hint */        switch (fn2) {        case 0x0:            /* JMP */            break;        case 0x1:            /* JSR */            break;        case 0x2:            /* RET */            break;        case 0x3:            /* JSR_COROUTINE */            break;        }        ret = 1;        break;    case 0x1B:        /* HW_LD (PALcode) */#if defined (CONFIG_USER_ONLY)        goto invalid_opc;#else        if (!ctx->pal_mode)            goto invalid_opc;        gen_load_ir(ctx, rb, 0);        gen_set_sT1(ctx, disp12);        gen_op_addq();        switch ((insn >> 12) & 0xF) {        case 0x0:            /* Longword physical access */            gen_op_ldl_raw();            break;        case 0x1:            /* Quadword physical access */            gen_op_ldq_raw();            break;        case 0x2:            /* Longword physical access with lock */            gen_op_ldl_l_raw();            break;        case 0x3:            /* Quadword physical access with lock */            gen_op_ldq_l_raw();            break;        case 0x4:            /* Longword virtual PTE fetch */            gen_op_ldl_kernel();            break;        case 0x5:            /* Quadword virtual PTE fetch */            gen_op_ldq_kernel();            break;        case 0x6:            /* Invalid */            goto invalid_opc;        case 0x7:            /* Invalid */            goto invalid_opc;        case 0x8:            /* Longword virtual access */            gen_op_ld_phys_to_virt();            gen_op_ldl_raw();            break;        case 0x9:            /* Quadword virtual access */            gen_op_ld_phys_to_virt();            gen_op_ldq_raw();            break;        case 0xA:            /* Longword virtual access with protection check */            gen_ldl(ctx);            break;        case 0xB:            /* Quadword virtual access with protection check */            gen_ldq(ctx);            break;        case 0xC:            /* Longword virtual access with altenate access mode */            gen_op_set_alt_mode();            gen_op_ld_phys_to_virt();            gen_op_ldl_raw();            gen_op_restore_mode();            break;        case 0xD:            /* Quadword virtual access with altenate access mode */            gen_op_set_alt_mode();            gen_op_ld_phys_to_virt();            gen_op_ldq_raw();            gen_op_restore_mode();            break;        case 0xE:            /* Longword virtual access with alternate access mode and             * protection checks             */            gen_op_set_alt_mode();            gen_op_ldl_data();            gen_op_restore_mode();            break;        case 0xF:            /* Quadword virtual access with alternate access mode and             * protection checks             */            gen_op_set_alt_mode();            gen_op_ldq_data();            gen_op_restore_mode();            break;        }        gen_store_ir(ctx, ra, 1);        break;#endif    case 0x1C:        switch (fn7) {        case 0x00:            /* SEXTB */            if (!(ctx->amask & AMASK_BWX))                goto invalid_opc;            gen_arith2(ctx, &gen_op_sextb, rb, rc, islit, lit);            break;        case 0x01:            /* SEXTW */            if (!(ctx->amask & AMASK_BWX))                goto invalid_opc;            gen_arith2(ctx, &gen_op_sextw, rb, rc, islit, lit);            break;        case 0x30:            /* CTPOP */            if (!(ctx->amask & AMASK_CIX))                goto invalid_opc;            gen_arith2(ctx, &gen_op_ctpop, rb, rc, 0, 0);            break;        case 0x31:            /* PERR */            if (!(ctx->amask & AMASK_MVI))                goto invalid_opc;            /* XXX: TODO */            goto invalid_opc;            break;        case 0x32:            /* CTLZ */            if (!(ctx->amask & AMASK_CIX))                goto invalid_opc;            gen_arith2(ctx, &gen_op_ctlz, rb, rc, 0, 0);            break;        case 0x33:            /* CTTZ */            if (!(ctx->amask & AMASK_CIX))                goto invalid_opc;            gen_arith2(ctx, &gen_op_cttz, rb, rc, 0, 0);            break;        case 0x34:            /* UNPKBW */            if (!(ctx->amask & AMASK_MVI))                goto invalid_opc;            /* XXX: TODO */            goto invalid_opc;            break;        case 0x35:            /* UNPKWL */            if (!(ctx->amask & AMASK_MVI))                goto invalid_opc;            /* XXX: TODO */            goto invalid_opc;            break;        case 0x36:            /* PKWB */            if (!(ctx->amask & AMASK_MVI))                goto invalid_opc;            /* XXX: TODO */            goto invalid_opc;            break;

⌨️ 快捷键说明

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