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

📄 translate.c.svn-base

📁 我们自己开发的一个OSEK操作系统!不知道可不可以?
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
                if (cond == 0x8) {                    save_state(dc);                    gen_op_trap_T0();                } else if (cond != 0) {#ifdef TARGET_SPARC64                    /* V9 icc/xcc */                    int cc = GET_FIELD_SP(insn, 11, 12);                    flush_T2(dc);                    save_state(dc);                    if (cc == 0)                        gen_cond[0][cond]();                    else if (cc == 2)                        gen_cond[1][cond]();                    else                        goto illegal_insn;#else                    flush_T2(dc);                    save_state(dc);                    gen_cond[0][cond]();#endif                    gen_op_trapcc_T0();                }                gen_op_next_insn();                gen_op_movl_T0_0();                gen_op_exit_tb();                dc->is_br = 1;                goto jmp_insn;            } else if (xop == 0x28) {                rs1 = GET_FIELD(insn, 13, 17);                switch(rs1) {                case 0: /* rdy */#ifndef TARGET_SPARC64                case 0x01 ... 0x0e: /* undefined in the SPARCv8                                       manual, rdy on the microSPARC                                       II */                case 0x0f:          /* stbar in the SPARCv8 manual,                                       rdy on the microSPARC II */                case 0x10 ... 0x1f: /* implementation-dependent in the                                       SPARCv8 manual, rdy on the                                       microSPARC II */#endif                    gen_op_movtl_T0_env(offsetof(CPUSPARCState, y));                    gen_movl_T0_reg(rd);                    break;#ifdef TARGET_SPARC64                case 0x2: /* V9 rdccr */                    gen_op_rdccr();                    gen_movl_T0_reg(rd);                    break;                case 0x3: /* V9 rdasi */                    gen_op_movl_T0_env(offsetof(CPUSPARCState, asi));                    gen_movl_T0_reg(rd);                    break;                case 0x4: /* V9 rdtick */                    gen_op_rdtick();                    gen_movl_T0_reg(rd);                    break;                case 0x5: /* V9 rdpc */                    if (dc->pc == (uint32_t)dc->pc) {                        gen_op_movl_T0_im(dc->pc);                    } else {                        gen_op_movq_T0_im64(dc->pc >> 32, dc->pc);                    }                    gen_movl_T0_reg(rd);                    break;                case 0x6: /* V9 rdfprs */                    gen_op_movl_T0_env(offsetof(CPUSPARCState, fprs));                    gen_movl_T0_reg(rd);                    break;                case 0xf: /* V9 membar */                    break; /* no effect */                case 0x13: /* Graphics Status */                    if (gen_trap_ifnofpu(dc))                        goto jmp_insn;                    gen_op_movtl_T0_env(offsetof(CPUSPARCState, gsr));                    gen_movl_T0_reg(rd);                    break;                case 0x17: /* Tick compare */                    gen_op_movtl_T0_env(offsetof(CPUSPARCState, tick_cmpr));                    gen_movl_T0_reg(rd);                    break;                case 0x18: /* System tick */                    gen_op_rdstick();                    gen_movl_T0_reg(rd);                    break;                case 0x19: /* System tick compare */                    gen_op_movtl_T0_env(offsetof(CPUSPARCState, stick_cmpr));                    gen_movl_T0_reg(rd);                    break;                case 0x10: /* Performance Control */                case 0x11: /* Performance Instrumentation Counter */                case 0x12: /* Dispatch Control */                case 0x14: /* Softint set, WO */                case 0x15: /* Softint clear, WO */                case 0x16: /* Softint write */#endif                default:                    goto illegal_insn;                }#if !defined(CONFIG_USER_ONLY)            } else if (xop == 0x29) { /* rdpsr / UA2005 rdhpr */#ifndef TARGET_SPARC64                if (!supervisor(dc))                    goto priv_insn;                gen_op_rdpsr();#else                if (!hypervisor(dc))                    goto priv_insn;                rs1 = GET_FIELD(insn, 13, 17);                switch (rs1) {                case 0: // hpstate                    // gen_op_rdhpstate();                    break;                case 1: // htstate                    // gen_op_rdhtstate();                    break;                case 3: // hintp                    gen_op_movl_T0_env(offsetof(CPUSPARCState, hintp));                    break;                case 5: // htba                    gen_op_movl_T0_env(offsetof(CPUSPARCState, htba));                    break;                case 6: // hver                    gen_op_movl_T0_env(offsetof(CPUSPARCState, hver));                    break;                case 31: // hstick_cmpr                    gen_op_movl_env_T0(offsetof(CPUSPARCState, hstick_cmpr));                    break;                default:                    goto illegal_insn;                }#endif                gen_movl_T0_reg(rd);                break;            } else if (xop == 0x2a) { /* rdwim / V9 rdpr */                if (!supervisor(dc))                    goto priv_insn;#ifdef TARGET_SPARC64                rs1 = GET_FIELD(insn, 13, 17);                switch (rs1) {                case 0: // tpc                    gen_op_rdtpc();                    break;                case 1: // tnpc                    gen_op_rdtnpc();                    break;                case 2: // tstate                    gen_op_rdtstate();                    break;                case 3: // tt                    gen_op_rdtt();                    break;                case 4: // tick                    gen_op_rdtick();                    break;                case 5: // tba                    gen_op_movtl_T0_env(offsetof(CPUSPARCState, tbr));                    break;                case 6: // pstate                    gen_op_rdpstate();                    break;                case 7: // tl                    gen_op_movl_T0_env(offsetof(CPUSPARCState, tl));                    break;                case 8: // pil                    gen_op_movl_T0_env(offsetof(CPUSPARCState, psrpil));                    break;                case 9: // cwp                    gen_op_rdcwp();                    break;                case 10: // cansave                    gen_op_movl_T0_env(offsetof(CPUSPARCState, cansave));                    break;                case 11: // canrestore                    gen_op_movl_T0_env(offsetof(CPUSPARCState, canrestore));                    break;                case 12: // cleanwin                    gen_op_movl_T0_env(offsetof(CPUSPARCState, cleanwin));                    break;                case 13: // otherwin                    gen_op_movl_T0_env(offsetof(CPUSPARCState, otherwin));                    break;                case 14: // wstate                    gen_op_movl_T0_env(offsetof(CPUSPARCState, wstate));                    break;                case 16: // UA2005 gl                    gen_op_movl_T0_env(offsetof(CPUSPARCState, gl));                    break;                case 26: // UA2005 strand status                    if (!hypervisor(dc))                        goto priv_insn;                    gen_op_movl_T0_env(offsetof(CPUSPARCState, ssr));                    break;                case 31: // ver                    gen_op_movtl_T0_env(offsetof(CPUSPARCState, version));                    break;                case 15: // fq                default:                    goto illegal_insn;                }#else                gen_op_movl_T0_env(offsetof(CPUSPARCState, wim));#endif                gen_movl_T0_reg(rd);                break;            } else if (xop == 0x2b) { /* rdtbr / V9 flushw */#ifdef TARGET_SPARC64                gen_op_flushw();#else                if (!supervisor(dc))                    goto priv_insn;                gen_op_movtl_T0_env(offsetof(CPUSPARCState, tbr));                gen_movl_T0_reg(rd);#endif                break;#endif            } else if (xop == 0x34) {   /* FPU Operations */                if (gen_trap_ifnofpu(dc))                    goto jmp_insn;                gen_op_clear_ieee_excp_and_FTT();                rs1 = GET_FIELD(insn, 13, 17);                rs2 = GET_FIELD(insn, 27, 31);                xop = GET_FIELD(insn, 18, 26);                switch (xop) {                    case 0x1: /* fmovs */                        gen_op_load_fpr_FT0(rs2);                        gen_op_store_FT0_fpr(rd);                        break;                    case 0x5: /* fnegs */                        gen_op_load_fpr_FT1(rs2);                        gen_op_fnegs();                        gen_op_store_FT0_fpr(rd);                        break;                    case 0x9: /* fabss */                        gen_op_load_fpr_FT1(rs2);                        gen_op_fabss();                        gen_op_store_FT0_fpr(rd);                        break;                    case 0x29: /* fsqrts */                        gen_op_load_fpr_FT1(rs2);                        gen_op_fsqrts();                        gen_op_store_FT0_fpr(rd);                        break;                    case 0x2a: /* fsqrtd */                        gen_op_load_fpr_DT1(DFPREG(rs2));                        gen_op_fsqrtd();                        gen_op_store_DT0_fpr(DFPREG(rd));                        break;                    case 0x2b: /* fsqrtq */#if defined(CONFIG_USER_ONLY)                        gen_op_load_fpr_QT1(QFPREG(rs2));                        gen_op_fsqrtq();                        gen_op_store_QT0_fpr(QFPREG(rd));                        break;#else                        goto nfpu_insn;#endif                    case 0x41:                        gen_op_load_fpr_FT0(rs1);                        gen_op_load_fpr_FT1(rs2);                        gen_op_fadds();                        gen_op_store_FT0_fpr(rd);                        break;                    case 0x42:                        gen_op_load_fpr_DT0(DFPREG(rs1));                        gen_op_load_fpr_DT1(DFPREG(rs2));                        gen_op_faddd();                        gen_op_store_DT0_fpr(DFPREG(rd));                        break;                    case 0x43: /* faddq */#if defined(CONFIG_USER_ONLY)                        gen_op_load_fpr_QT0(QFPREG(rs1));                        gen_op_load_fpr_QT1(QFPREG(rs2));                        gen_op_faddq();                        gen_op_store_QT0_fpr(QFPREG(rd));                        break;#else                        goto nfpu_insn;#endif                    case 0x45:                        gen_op_load_fpr_FT0(rs1);                        gen_op_load_fpr_FT1(rs2);                        gen_op_fsubs();                        gen_op_store_FT0_fpr(rd);                        break;                    case 0x46:                        gen_op_load_fpr_DT0(DFPREG(rs1));                        gen_op_load_fpr_DT1(DFPREG(rs2));                        gen_op_fsubd();                        gen_op_store_DT0_fpr(DFPREG(rd));                        break;                    case 0x47: /* fsubq */#if defined(CONFIG_USER_ONLY)                        gen_op_load_fpr_QT0(QFPREG(rs1));                        gen_op_load_fpr_QT1(QFPREG(rs2));                        gen_op_fsubq();                        gen_op_store_QT0_fpr(QFPREG(rd));                        break;#else                        goto nfpu_insn;#endif                    case 0x49:                        gen_op_load_fpr_FT0(rs1);                        gen_op_load_fpr_FT1(rs2);                        gen_op_fmuls();                        gen_op_store_FT0_fpr(rd);                        break;                    case 0x4a:                        gen_op_load_fpr_DT0(DFPREG(rs1));                        gen_op_load_fpr_DT1(DFPREG(rs2));                        gen_op_fmuld();                        gen_op_store_DT0_fpr(DFPREG(rd));                        break;                    case 0x4b: /* fmulq */#if defined(CONFIG_USER_ONLY)                        gen_op_load_fpr_QT0(QFPREG(rs1));                        gen_op_load_fpr_QT1(QFPREG(rs2));                        gen_op_fmulq();                        gen_op_store_QT0_fpr(QFPREG(rd));                        break;#else                        goto nfpu_insn;#endif                    case 0x4d:                        gen_op_load_fpr_FT0(rs1);                        gen_op_load_fpr_FT1(rs2);                        gen_op_fdivs();                        gen_op_store_FT0_fpr(rd);                        break;                    case 0x4e:                        gen_op_load_fpr_DT0(DFPREG(rs1));                        gen_op_load_fpr_DT1(DFPREG(rs2));                        gen_op_fdivd();                        gen_op_store_DT0_fpr(DFPREG(rd));                        break;                    case 0x4f: /* fdivq */#if defined(CONFIG_USER_ONLY)                        gen_op_load_fpr_QT0(QFPREG(rs1));                        gen_op_load_fpr_QT1(QFPREG(rs2));                        gen_op_fdivq();                        gen_op_store_QT0_fpr(QFPREG(rd));                        break;#else                        goto nfpu_insn;#endif                    case 0x69:                        gen_op_load_fpr_FT0(rs1);                        gen_op_load_fpr_FT1(rs2);                        gen_op_fsmuld();                        gen_op_store_DT0_fpr(DFPREG(rd));                        break;                    case 0x6e: /* fdmulq */#if defined(CONFIG_USER_ONLY)                        gen_op_load_fpr_DT0(DFPREG(rs1));                        gen_op_load_fpr_DT1(DFPREG(rs2));                        gen_op_fdmulq();                        gen_op_store_QT0_fpr(QFPREG(rd));                        break;#else                        goto nfpu_insn;#endif                    case 0xc4:                        gen_op_load_fpr_FT1(rs2);                        gen_op_fitos();                        gen_op_store_FT0_fpr(rd);                        break;                    case 0xc6:                        gen_op_load_fpr_DT1(DFPREG(rs2));                        gen_op_fdtos();                        gen_op_store_FT0_fpr(rd);                        break;                    case 0xc7: /* fqtos */#if defined(CONFIG_USER_ONLY)                        gen_op_load_fpr_QT1(QFPREG(rs2));                        gen_op_fqtos();                        gen_op_store_FT0_fpr(rd);                        break;#else                        goto nfpu_insn;#endif                    case 0xc8:                        gen_op_load_fpr_FT1(rs2);                        gen_op_fitod();                        gen_op_store_DT0_fpr(DFPREG(rd));                        break;                    case 0xc9:                        gen_op_load_fpr_FT1(rs2);                        gen_op_fstod();                        gen_op_store_DT0_fpr(DFPREG(rd));                        break;                    case 0xcb: /* fqtod */#if defined(CONFIG_USER_ONLY)                        gen_op_load_fpr_QT1(QFPREG(rs2));                        gen_op_fqtod();                        gen_op_store_DT0_fpr(DFPREG(rd));                        break;#else                        goto nfpu_insn;#endif                    case 0xcc: /* fitoq */#if defined(CONFIG_USER_ONLY)                        gen_op_load_fpr_FT1(rs2);                        gen_op_fitoq();                        gen_op_store_QT0_fpr(QFPREG(rd));                        break;#else                        goto nfpu_insn;#endif                    case 0xcd: /* fstoq */#if defined(CONFIG_USER_ONLY)                        gen_op_load_fpr_FT1(rs2);                        gen_op_fstoq();                        gen_op_store_QT0_fpr(QFPREG(rd));                        break;#else                        goto nfpu_insn;#endif                    case 0xce: /* fdtoq */#if defined(CONFIG_USER_ONLY)                        gen_op_load_fpr_DT1(DFPREG(rs2));

⌨️ 快捷键说明

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