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

📄 translate.c.svn-base

📁 我们自己开发的一个OSEK操作系统!不知道可不可以?
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
    gen_op_store_T0_gpr(rD(ctx->opcode));}/* mulli */GEN_HANDLER(mulli, 0x07, 0xFF, 0xFF, 0x00000000, PPC_INTEGER){    gen_op_load_gpr_T0(rA(ctx->opcode));    gen_op_mulli(SIMM(ctx->opcode));    gen_op_store_T0_gpr(rD(ctx->opcode));}/* subfic */GEN_HANDLER(subfic, 0x08, 0xFF, 0xFF, 0x00000000, PPC_INTEGER){    gen_op_load_gpr_T0(rA(ctx->opcode));#if defined(TARGET_PPC64)    if (ctx->sf_mode)        gen_op_subfic_64(SIMM(ctx->opcode));    else#endif        gen_op_subfic(SIMM(ctx->opcode));    gen_op_store_T0_gpr(rD(ctx->opcode));}#if defined(TARGET_PPC64)/* mulhd  mulhd.                   */GEN_INT_ARITHN (mulhd,  0x1F, 0x09, 0x02, PPC_64B);/* mulhdu mulhdu.                  */GEN_INT_ARITHN (mulhdu, 0x1F, 0x09, 0x00, PPC_64B);/* mulld  mulld.  mulldo  mulldo.  */GEN_INT_ARITH2 (mulld,  0x1F, 0x09, 0x07, PPC_64B);/* divd   divd.   divdo   divdo.   */GEN_INT_ARITH2 (divd,   0x1F, 0x09, 0x0F, PPC_64B);/* divdu  divdu.  divduo  divduo.  */GEN_INT_ARITH2 (divdu,  0x1F, 0x09, 0x0E, PPC_64B);#endif/***                           Integer comparison                          ***/#if defined(TARGET_PPC64)#define GEN_CMP(name, opc, type)                                              \GEN_HANDLER(name, 0x1F, 0x00, opc, 0x00400000, type)                          \{                                                                             \    gen_op_load_gpr_T0(rA(ctx->opcode));                                      \    gen_op_load_gpr_T1(rB(ctx->opcode));                                      \    if (ctx->sf_mode && (ctx->opcode & 0x00200000))                           \        gen_op_##name##_64();                                                 \    else                                                                      \        gen_op_##name();                                                      \    gen_op_store_T0_crf(crfD(ctx->opcode));                                   \}#else#define GEN_CMP(name, opc, type)                                              \GEN_HANDLER(name, 0x1F, 0x00, opc, 0x00400000, type)                          \{                                                                             \    gen_op_load_gpr_T0(rA(ctx->opcode));                                      \    gen_op_load_gpr_T1(rB(ctx->opcode));                                      \    gen_op_##name();                                                          \    gen_op_store_T0_crf(crfD(ctx->opcode));                                   \}#endif/* cmp */GEN_CMP(cmp, 0x00, PPC_INTEGER);/* cmpi */GEN_HANDLER(cmpi, 0x0B, 0xFF, 0xFF, 0x00400000, PPC_INTEGER){    gen_op_load_gpr_T0(rA(ctx->opcode));#if defined(TARGET_PPC64)    if (ctx->sf_mode && (ctx->opcode & 0x00200000))        gen_op_cmpi_64(SIMM(ctx->opcode));    else#endif        gen_op_cmpi(SIMM(ctx->opcode));    gen_op_store_T0_crf(crfD(ctx->opcode));}/* cmpl */GEN_CMP(cmpl, 0x01, PPC_INTEGER);/* cmpli */GEN_HANDLER(cmpli, 0x0A, 0xFF, 0xFF, 0x00400000, PPC_INTEGER){    gen_op_load_gpr_T0(rA(ctx->opcode));#if defined(TARGET_PPC64)    if (ctx->sf_mode && (ctx->opcode & 0x00200000))        gen_op_cmpli_64(UIMM(ctx->opcode));    else#endif        gen_op_cmpli(UIMM(ctx->opcode));    gen_op_store_T0_crf(crfD(ctx->opcode));}/* isel (PowerPC 2.03 specification) */GEN_HANDLER(isel, 0x1F, 0x0F, 0x00, 0x00000001, PPC_ISEL){    uint32_t bi = rC(ctx->opcode);    uint32_t mask;    if (rA(ctx->opcode) == 0) {        gen_set_T0(0);    } else {        gen_op_load_gpr_T1(rA(ctx->opcode));    }    gen_op_load_gpr_T2(rB(ctx->opcode));    mask = 1 << (3 - (bi & 0x03));    gen_op_load_crf_T0(bi >> 2);    gen_op_test_true(mask);    gen_op_isel();    gen_op_store_T0_gpr(rD(ctx->opcode));}/***                            Integer logical                            ***/#define __GEN_LOGICAL2(name, opc2, opc3, type)                                \GEN_HANDLER(name, 0x1F, opc2, opc3, 0x00000000, type)                         \{                                                                             \    gen_op_load_gpr_T0(rS(ctx->opcode));                                      \    gen_op_load_gpr_T1(rB(ctx->opcode));                                      \    gen_op_##name();                                                          \    gen_op_store_T0_gpr(rA(ctx->opcode));                                     \    if (unlikely(Rc(ctx->opcode) != 0))                                       \        gen_set_Rc0(ctx);                                                     \}#define GEN_LOGICAL2(name, opc, type)                                         \__GEN_LOGICAL2(name, 0x1C, opc, type)#define GEN_LOGICAL1(name, opc, type)                                         \GEN_HANDLER(name, 0x1F, 0x1A, opc, 0x00000000, type)                          \{                                                                             \    gen_op_load_gpr_T0(rS(ctx->opcode));                                      \    gen_op_##name();                                                          \    gen_op_store_T0_gpr(rA(ctx->opcode));                                     \    if (unlikely(Rc(ctx->opcode) != 0))                                       \        gen_set_Rc0(ctx);                                                     \}/* and & and. */GEN_LOGICAL2(and, 0x00, PPC_INTEGER);/* andc & andc. */GEN_LOGICAL2(andc, 0x01, PPC_INTEGER);/* andi. */GEN_HANDLER2(andi_, "andi.", 0x1C, 0xFF, 0xFF, 0x00000000, PPC_INTEGER){    gen_op_load_gpr_T0(rS(ctx->opcode));    gen_op_andi_T0(UIMM(ctx->opcode));    gen_op_store_T0_gpr(rA(ctx->opcode));    gen_set_Rc0(ctx);}/* andis. */GEN_HANDLER2(andis_, "andis.", 0x1D, 0xFF, 0xFF, 0x00000000, PPC_INTEGER){    gen_op_load_gpr_T0(rS(ctx->opcode));    gen_op_andi_T0(UIMM(ctx->opcode) << 16);    gen_op_store_T0_gpr(rA(ctx->opcode));    gen_set_Rc0(ctx);}/* cntlzw */GEN_LOGICAL1(cntlzw, 0x00, PPC_INTEGER);/* eqv & eqv. */GEN_LOGICAL2(eqv, 0x08, PPC_INTEGER);/* extsb & extsb. */GEN_LOGICAL1(extsb, 0x1D, PPC_INTEGER);/* extsh & extsh. */GEN_LOGICAL1(extsh, 0x1C, PPC_INTEGER);/* nand & nand. */GEN_LOGICAL2(nand, 0x0E, PPC_INTEGER);/* nor & nor. */GEN_LOGICAL2(nor, 0x03, PPC_INTEGER);/* or & or. */GEN_HANDLER(or, 0x1F, 0x1C, 0x0D, 0x00000000, PPC_INTEGER){    int rs, ra, rb;    rs = rS(ctx->opcode);    ra = rA(ctx->opcode);    rb = rB(ctx->opcode);    /* Optimisation for mr. ri case */    if (rs != ra || rs != rb) {        gen_op_load_gpr_T0(rs);        if (rs != rb) {            gen_op_load_gpr_T1(rb);            gen_op_or();        }        gen_op_store_T0_gpr(ra);        if (unlikely(Rc(ctx->opcode) != 0))            gen_set_Rc0(ctx);    } else if (unlikely(Rc(ctx->opcode) != 0)) {        gen_op_load_gpr_T0(rs);        gen_set_Rc0(ctx);		#if defined(TARGET_PPC64)    } else {        switch (rs) {        case 1:            /* Set process priority to low */            gen_op_store_pri(2);            break;        case 6:            /* Set process priority to medium-low */            gen_op_store_pri(3);            break;        case 2:            /* Set process priority to normal */            gen_op_store_pri(4);            break;#if !defined(CONFIG_USER_ONLY)        case 31:            if (ctx->supervisor > 0) {                /* Set process priority to very low */                gen_op_store_pri(1);            }            break;        case 5:            if (ctx->supervisor > 0) {                /* Set process priority to medium-hight */                gen_op_store_pri(5);            }            break;        case 3:            if (ctx->supervisor > 0) {                /* Set process priority to high */                gen_op_store_pri(6);            }            break;        case 7:            if (ctx->supervisor > 1) {                /* Set process priority to very high */                gen_op_store_pri(7);            }            break;#endif        default:            /* nop */            break;        }#endif    }}/* orc & orc. */GEN_LOGICAL2(orc, 0x0C, PPC_INTEGER);/* xor & xor. */GEN_HANDLER(xor, 0x1F, 0x1C, 0x09, 0x00000000, PPC_INTEGER){    gen_op_load_gpr_T0(rS(ctx->opcode));    /* Optimisation for "set to zero" case */    if (rS(ctx->opcode) != rB(ctx->opcode)) {        gen_op_load_gpr_T1(rB(ctx->opcode));        gen_op_xor();    } else {        gen_op_reset_T0();    }    gen_op_store_T0_gpr(rA(ctx->opcode));    if (unlikely(Rc(ctx->opcode) != 0))        gen_set_Rc0(ctx);}/* ori */GEN_HANDLER(ori, 0x18, 0xFF, 0xFF, 0x00000000, PPC_INTEGER){    target_ulong uimm = UIMM(ctx->opcode);          if (rS(ctx->opcode) == rA(ctx->opcode) && uimm == 0) {        /* NOP */        /* XXX: should handle special NOPs for POWER series */        return;    }	    gen_op_load_gpr_T0(rS(ctx->opcode));    if (likely(uimm != 0))        gen_op_ori(uimm);    gen_op_store_T0_gpr(rA(ctx->opcode));		}/* oris */GEN_HANDLER(oris, 0x19, 0xFF, 0xFF, 0x00000000, PPC_INTEGER){    target_ulong uimm = UIMM(ctx->opcode);    if (rS(ctx->opcode) == rA(ctx->opcode) && uimm == 0) {        /* NOP */        return;    }    gen_op_load_gpr_T0(rS(ctx->opcode));    if (likely(uimm != 0))        gen_op_ori(uimm << 16);    gen_op_store_T0_gpr(rA(ctx->opcode));}/* xori */GEN_HANDLER(xori, 0x1A, 0xFF, 0xFF, 0x00000000, PPC_INTEGER){    target_ulong uimm = UIMM(ctx->opcode);    if (rS(ctx->opcode) == rA(ctx->opcode) && uimm == 0) {        /* NOP */        return;    }    gen_op_load_gpr_T0(rS(ctx->opcode));    if (likely(uimm != 0))        gen_op_xori(uimm);    gen_op_store_T0_gpr(rA(ctx->opcode));}/* xoris */GEN_HANDLER(xoris, 0x1B, 0xFF, 0xFF, 0x00000000, PPC_INTEGER){    target_ulong uimm = UIMM(ctx->opcode);    if (rS(ctx->opcode) == rA(ctx->opcode) && uimm == 0) {        /* NOP */        return;    }    gen_op_load_gpr_T0(rS(ctx->opcode));    if (likely(uimm != 0))        gen_op_xori(uimm << 16);    gen_op_store_T0_gpr(rA(ctx->opcode));}/* popcntb : PowerPC 2.03 specification */GEN_HANDLER(popcntb, 0x1F, 0x03, 0x03, 0x0000F801, PPC_POPCNTB){    gen_op_load_gpr_T0(rS(ctx->opcode));#if defined(TARGET_PPC64)    if (ctx->sf_mode)        gen_op_popcntb_64();    else#endif        gen_op_popcntb();    gen_op_store_T0_gpr(rA(ctx->opcode));}#if defined(TARGET_PPC64)/* extsw & extsw. */GEN_LOGICAL1(extsw, 0x1E, PPC_64B);/* cntlzd */GEN_LOGICAL1(cntlzd, 0x01, PPC_64B);#endif/***                             Integer rotate                            ***//* rlwimi & rlwimi. */GEN_HANDLER(rlwimi, 0x14, 0xFF, 0xFF, 0x00000000, PPC_INTEGER){    target_ulong mask;    uint32_t mb, me, sh;    mb = MB(ctx->opcode);    me = ME(ctx->opcode);    sh = SH(ctx->opcode);    if (likely(sh == 0)) {        if (likely(mb == 0 && me == 31)) {            gen_op_load_gpr_T0(rS(ctx->opcode));            goto do_store;        } else if (likely(mb == 31 && me == 0)) {            gen_op_load_gpr_T0(rA(ctx->opcode));            goto do_store;

⌨️ 快捷键说明

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