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

📄 op.c

📁 qemu虚拟机代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    do_addzeo();    RETURN();}/* divide word */PPC_OP(divw){    if ((Ts0 == INT32_MIN && Ts1 == -1) || Ts1 == 0) {        T0 = (int32_t)((-1) * (T0 >> 31));    } else {        T0 = (Ts0 / Ts1);    }    RETURN();}void do_divwo (void);void op_divwo (void){    do_divwo();    RETURN();}/* divide word unsigned */PPC_OP(divwu){    if (T1 == 0) {        T0 = 0;    } else {        T0 /= T1;    }    RETURN();}void do_divwuo (void);void op_divwuo (void){    do_divwuo();    RETURN();}/* multiply high word */PPC_OP(mulhw){    T0 = ((int64_t)Ts0 * (int64_t)Ts1) >> 32;    RETURN();}/* multiply high word unsigned */PPC_OP(mulhwu){    T0 = ((uint64_t)T0 * (uint64_t)T1) >> 32;    RETURN();}/* multiply low immediate */PPC_OP(mulli){    T0 = (Ts0 * SPARAM(1));    RETURN();}/* multiply low word */PPC_OP(mullw){    T0 *= T1;    RETURN();}void do_mullwo (void);void op_mullwo (void){    do_mullwo();    RETURN();}/* negate */PPC_OP(neg){    if (T0 != 0x80000000) {        T0 = -Ts0;    }    RETURN();}void do_nego (void);void op_nego (void){    do_nego();    RETURN();}/* substract from */PPC_OP(subf){    T0 = T1 - T0;    RETURN();}void do_subfo (void);void op_subfo (void){    do_subfo();    RETURN();}/* substract from carrying */PPC_OP(subfc){    T0 = T1 - T0;    if (T0 <= T1) {        xer_ca = 1;    } else {        xer_ca = 0;    }    RETURN();}void do_subfco (void);void op_subfco (void){    do_subfco();    RETURN();}/* substract from extended */void do_subfe (void);void op_subfe (void){    do_subfe();    RETURN();}void do_subfeo (void);PPC_OP(subfeo){    do_subfeo();    RETURN();}/* substract from immediate carrying */PPC_OP(subfic){    T0 = PARAM(1) + ~T0 + 1;    if (T0 <= PARAM(1)) {        xer_ca = 1;    } else {        xer_ca = 0;    }    RETURN();}/* substract from minus one extended */PPC_OP(subfme){    T0 = ~T0 + xer_ca - 1;    if (T0 != -1)        xer_ca = 1;    RETURN();}void do_subfmeo (void);void op_subfmeo (void){    do_subfmeo();    RETURN();}/* substract from zero extended */PPC_OP(subfze){    T1 = ~T0;    T0 = T1 + xer_ca;    if (T0 < T1) {        xer_ca = 1;    } else {        xer_ca = 0;    }    RETURN();}void do_subfzeo (void);void op_subfzeo (void){    do_subfzeo();    RETURN();}/***                           Integer comparison                          ***//* compare */PPC_OP(cmp){    if (Ts0 < Ts1) {        T0 = 0x08;    } else if (Ts0 > Ts1) {        T0 = 0x04;    } else {        T0 = 0x02;    }    RETURN();}/* compare immediate */PPC_OP(cmpi){    if (Ts0 < SPARAM(1)) {        T0 = 0x08;    } else if (Ts0 > SPARAM(1)) {        T0 = 0x04;    } else {        T0 = 0x02;    }    RETURN();}/* compare logical */PPC_OP(cmpl){    if (T0 < T1) {        T0 = 0x08;    } else if (T0 > T1) {        T0 = 0x04;    } else {        T0 = 0x02;    }    RETURN();}/* compare logical immediate */PPC_OP(cmpli){    if (T0 < PARAM(1)) {        T0 = 0x08;    } else if (T0 > PARAM(1)) {        T0 = 0x04;    } else {        T0 = 0x02;    }    RETURN();}/***                            Integer logical                            ***//* and */PPC_OP(and){    T0 &= T1;    RETURN();}/* andc */PPC_OP(andc){    T0 &= ~T1;    RETURN();}/* andi. */PPC_OP(andi_){    T0 &= PARAM(1);    RETURN();}/* count leading zero */PPC_OP(cntlzw){    T1 = T0;    for (T0 = 32; T1 > 0; T0--)        T1 = T1 >> 1;    RETURN();}/* eqv */PPC_OP(eqv){    T0 = ~(T0 ^ T1);    RETURN();}/* extend sign byte */PPC_OP(extsb){    T0 = (int32_t)((int8_t)(Ts0));    RETURN();}/* extend sign half word */PPC_OP(extsh){    T0 = (int32_t)((int16_t)(Ts0));    RETURN();}/* nand */PPC_OP(nand){    T0 = ~(T0 & T1);    RETURN();}/* nor */PPC_OP(nor){    T0 = ~(T0 | T1);    RETURN();}/* or */PPC_OP(or){    T0 |= T1;    RETURN();}/* orc */PPC_OP(orc){    T0 |= ~T1;    RETURN();}/* ori */PPC_OP(ori){    T0 |= PARAM(1);    RETURN();}/* xor */PPC_OP(xor){    T0 ^= T1;    RETURN();}/* xori */PPC_OP(xori){    T0 ^= PARAM(1);    RETURN();}/***                             Integer rotate                            ***//* rotate left word immediate then mask insert */PPC_OP(rlwimi){    T0 = (rotl(T0, PARAM(1)) & PARAM(2)) | (T1 & PARAM(3));    RETURN();}/* rotate left immediate then and with mask insert */PPC_OP(rotlwi){    T0 = rotl(T0, PARAM(1));    RETURN();}PPC_OP(slwi){    T0 = T0 << PARAM(1);    RETURN();}PPC_OP(srwi){    T0 = T0 >> PARAM(1);    RETURN();}/* rotate left word then and with mask insert */PPC_OP(rlwinm){    T0 = rotl(T0, PARAM(1)) & PARAM(2);    RETURN();}PPC_OP(rotl){    T0 = rotl(T0, T1);    RETURN();}PPC_OP(rlwnm){    T0 = rotl(T0, T1) & PARAM(1);    RETURN();}/***                             Integer shift                             ***//* shift left word */PPC_OP(slw){    if (T1 & 0x20) {        T0 = 0;    } else {        T0 = T0 << T1;    }    RETURN();}/* shift right algebraic word */void op_sraw (void){    do_sraw();    RETURN();}/* shift right algebraic word immediate */PPC_OP(srawi){    T1 = T0;    T0 = (Ts0 >> PARAM(1));    if (Ts1 < 0 && (Ts1 & PARAM(2)) != 0) {        xer_ca = 1;    } else {        xer_ca = 0;    }    RETURN();}/* shift right word */PPC_OP(srw){    if (T1 & 0x20) {        T0 = 0;    } else {        T0 = T0 >> T1;    }    RETURN();}/***                       Floating-Point arithmetic                       ***//* fadd - fadd. */PPC_OP(fadd){    FT0 += FT1;    RETURN();}/* fsub - fsub. */PPC_OP(fsub){    FT0 -= FT1;    RETURN();}/* fmul - fmul. */PPC_OP(fmul){    FT0 *= FT1;    RETURN();}/* fdiv - fdiv. */PPC_OP(fdiv){    FT0 = float64_div(FT0, FT1, &env->fp_status);    RETURN();}/* fsqrt - fsqrt. */PPC_OP(fsqrt){    do_fsqrt();    RETURN();}/* fres - fres. */PPC_OP(fres){    do_fres();    RETURN();}/* frsqrte  - frsqrte. */PPC_OP(frsqrte){    do_frsqrte();    RETURN();}/* fsel - fsel. */PPC_OP(fsel){    do_fsel();    RETURN();}/***                     Floating-Point multiply-and-add                   ***//* fmadd - fmadd. */PPC_OP(fmadd){    FT0 = (FT0 * FT1) + FT2;    RETURN();}/* fmsub - fmsub. */PPC_OP(fmsub){    FT0 = (FT0 * FT1) - FT2;    RETURN();}/* fnmadd - fnmadd. - fnmadds - fnmadds. */PPC_OP(fnmadd){    do_fnmadd();    RETURN();}/* fnmsub - fnmsub. */PPC_OP(fnmsub){    do_fnmsub();    RETURN();}/***                     Floating-Point round & convert                    ***//* frsp - frsp. */PPC_OP(frsp){    FT0 = (float)FT0;    RETURN();}/* fctiw - fctiw. */PPC_OP(fctiw){    do_fctiw();    RETURN();}/* fctiwz - fctiwz. */PPC_OP(fctiwz){    do_fctiwz();    RETURN();}/***                         Floating-Point compare                        ***//* fcmpu */PPC_OP(fcmpu){    do_fcmpu();    RETURN();}/* fcmpo */PPC_OP(fcmpo){    do_fcmpo();    RETURN();}/***                         Floating-point move                           ***//* fabs */PPC_OP(fabs){    FT0 = float64_abs(FT0);    RETURN();}/* fnabs */PPC_OP(fnabs){    FT0 = float64_abs(FT0);    FT0 = float64_chs(FT0);    RETURN();}/* fneg */PPC_OP(fneg){    FT0 = float64_chs(FT0);    RETURN();}/* Load and store */#define MEMSUFFIX _raw#include "op_mem.h"#if !defined(CONFIG_USER_ONLY)#define MEMSUFFIX _user#include "op_mem.h"#define MEMSUFFIX _kernel#include "op_mem.h"#endif/* Special op to check and maybe clear reservation */PPC_OP(check_reservation){    if ((uint32_t)env->reserve == (uint32_t)(T0 & ~0x00000003))        env->reserve = -1;    RETURN();}/* Return from interrupt */void do_rfi (void);void op_rfi (void){    do_rfi();    RETURN();}/* Trap word */void do_tw (uint32_t cmp, int flags);void op_tw (void){    do_tw(T1, PARAM(1));    RETURN();}void op_twi (void){    do_tw(PARAM(1), PARAM(2));    RETURN();}/* Instruction cache block invalidate */PPC_OP(icbi){    do_icbi();    RETURN();}/* tlbia */PPC_OP(tlbia){    do_tlbia();    RETURN();}/* tlbie */PPC_OP(tlbie){    do_tlbie();    RETURN();}void op_store_pir (void){    env->spr[SPR_PIR] = T0 & 0x0000000FUL;    RETURN();}

⌨️ 快捷键说明

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