translate.c

来自「xen虚拟机源代码安装包」· C语言 代码 · 共 2,286 行 · 第 1/5 页

C
2,286
字号
        gen_op_iwmmxt_set_cup();        break;    case 0x802: case 0x902: case 0xa02: case 0xb02:	/* WALIGNR */        wrd = (insn >> 12) & 0xf;        rd0 = (insn >> 16) & 0xf;        rd1 = (insn >> 0) & 0xf;        gen_op_iwmmxt_movq_M0_wRn(rd0);        gen_op_iwmmxt_movl_T0_wCx(ARM_IWMMXT_wCGR0 + ((insn >> 20) & 3));        gen_op_movl_T1_im(7);        gen_op_andl_T0_T1();        gen_op_iwmmxt_align_M0_T0_wRn(rd1);        gen_op_iwmmxt_movq_wRn_M0(wrd);        gen_op_iwmmxt_set_mup();        break;    case 0x601: case 0x605: case 0x609: case 0x60d:	/* TINSR */        rd = (insn >> 12) & 0xf;        wrd = (insn >> 16) & 0xf;        gen_movl_T0_reg(s, rd);        gen_op_iwmmxt_movq_M0_wRn(wrd);        switch ((insn >> 6) & 3) {        case 0:            gen_op_movl_T1_im(0xff);            gen_op_iwmmxt_insr_M0_T0_T1((insn & 7) << 3);            break;        case 1:            gen_op_movl_T1_im(0xffff);            gen_op_iwmmxt_insr_M0_T0_T1((insn & 3) << 4);            break;        case 2:            gen_op_movl_T1_im(0xffffffff);            gen_op_iwmmxt_insr_M0_T0_T1((insn & 1) << 5);            break;        case 3:            return 1;        }        gen_op_iwmmxt_movq_wRn_M0(wrd);        gen_op_iwmmxt_set_mup();        break;    case 0x107: case 0x507: case 0x907: case 0xd07:	/* TEXTRM */        rd = (insn >> 12) & 0xf;        wrd = (insn >> 16) & 0xf;        if (rd == 15)            return 1;        gen_op_iwmmxt_movq_M0_wRn(wrd);        switch ((insn >> 22) & 3) {        case 0:            if (insn & 8)                gen_op_iwmmxt_extrsb_T0_M0((insn & 7) << 3);            else {                gen_op_iwmmxt_extru_T0_M0((insn & 7) << 3, 0xff);            }            break;        case 1:            if (insn & 8)                gen_op_iwmmxt_extrsw_T0_M0((insn & 3) << 4);            else {                gen_op_iwmmxt_extru_T0_M0((insn & 3) << 4, 0xffff);            }            break;        case 2:            gen_op_iwmmxt_extru_T0_M0((insn & 1) << 5, ~0u);            break;        case 3:            return 1;        }        gen_movl_reg_T0(s, rd);        break;    case 0x117: case 0x517: case 0x917: case 0xd17:	/* TEXTRC */        if ((insn & 0x000ff008) != 0x0003f000)            return 1;        gen_op_iwmmxt_movl_T1_wCx(ARM_IWMMXT_wCASF);        switch ((insn >> 22) & 3) {        case 0:            gen_op_shrl_T1_im(((insn & 7) << 2) + 0);            break;        case 1:            gen_op_shrl_T1_im(((insn & 3) << 3) + 4);            break;        case 2:            gen_op_shrl_T1_im(((insn & 1) << 4) + 12);            break;        case 3:            return 1;        }        gen_op_shll_T1_im(28);        gen_set_nzcv(cpu_T[1]);        break;    case 0x401: case 0x405: case 0x409: case 0x40d:	/* TBCST */        rd = (insn >> 12) & 0xf;        wrd = (insn >> 16) & 0xf;        gen_movl_T0_reg(s, rd);        switch ((insn >> 6) & 3) {        case 0:            gen_helper_iwmmxt_bcstb(cpu_M0, cpu_T[0]);            break;        case 1:            gen_helper_iwmmxt_bcstw(cpu_M0, cpu_T[0]);            break;        case 2:            gen_helper_iwmmxt_bcstl(cpu_M0, cpu_T[0]);            break;        case 3:            return 1;        }        gen_op_iwmmxt_movq_wRn_M0(wrd);        gen_op_iwmmxt_set_mup();        break;    case 0x113: case 0x513: case 0x913: case 0xd13:	/* TANDC */        if ((insn & 0x000ff00f) != 0x0003f000)            return 1;        gen_op_iwmmxt_movl_T1_wCx(ARM_IWMMXT_wCASF);        switch ((insn >> 22) & 3) {        case 0:            for (i = 0; i < 7; i ++) {                gen_op_shll_T1_im(4);                gen_op_andl_T0_T1();            }            break;        case 1:            for (i = 0; i < 3; i ++) {                gen_op_shll_T1_im(8);                gen_op_andl_T0_T1();            }            break;        case 2:            gen_op_shll_T1_im(16);            gen_op_andl_T0_T1();            break;        case 3:            return 1;        }        gen_set_nzcv(cpu_T[0]);        break;    case 0x01c: case 0x41c: case 0x81c: case 0xc1c:	/* WACC */        wrd = (insn >> 12) & 0xf;        rd0 = (insn >> 16) & 0xf;        gen_op_iwmmxt_movq_M0_wRn(rd0);        switch ((insn >> 22) & 3) {        case 0:            gen_helper_iwmmxt_addcb(cpu_M0, cpu_M0);            break;        case 1:            gen_helper_iwmmxt_addcw(cpu_M0, cpu_M0);            break;        case 2:            gen_helper_iwmmxt_addcl(cpu_M0, cpu_M0);            break;        case 3:            return 1;        }        gen_op_iwmmxt_movq_wRn_M0(wrd);        gen_op_iwmmxt_set_mup();        break;    case 0x115: case 0x515: case 0x915: case 0xd15:	/* TORC */        if ((insn & 0x000ff00f) != 0x0003f000)            return 1;        gen_op_iwmmxt_movl_T1_wCx(ARM_IWMMXT_wCASF);        switch ((insn >> 22) & 3) {        case 0:            for (i = 0; i < 7; i ++) {                gen_op_shll_T1_im(4);                gen_op_orl_T0_T1();            }            break;        case 1:            for (i = 0; i < 3; i ++) {                gen_op_shll_T1_im(8);                gen_op_orl_T0_T1();            }            break;        case 2:            gen_op_shll_T1_im(16);            gen_op_orl_T0_T1();            break;        case 3:            return 1;        }        gen_set_nzcv(cpu_T[0]);        break;    case 0x103: case 0x503: case 0x903: case 0xd03:	/* TMOVMSK */        rd = (insn >> 12) & 0xf;        rd0 = (insn >> 16) & 0xf;        if ((insn & 0xf) != 0)            return 1;        gen_op_iwmmxt_movq_M0_wRn(rd0);        switch ((insn >> 22) & 3) {        case 0:            gen_helper_iwmmxt_msbb(cpu_T[0], cpu_M0);            break;        case 1:            gen_helper_iwmmxt_msbw(cpu_T[0], cpu_M0);            break;        case 2:            gen_helper_iwmmxt_msbl(cpu_T[0], cpu_M0);            break;        case 3:            return 1;        }        gen_movl_reg_T0(s, rd);        break;    case 0x106: case 0x306: case 0x506: case 0x706:	/* WCMPGT */    case 0x906: case 0xb06: case 0xd06: case 0xf06:        wrd = (insn >> 12) & 0xf;        rd0 = (insn >> 16) & 0xf;        rd1 = (insn >> 0) & 0xf;        gen_op_iwmmxt_movq_M0_wRn(rd0);        switch ((insn >> 22) & 3) {        case 0:            if (insn & (1 << 21))                gen_op_iwmmxt_cmpgtsb_M0_wRn(rd1);            else                gen_op_iwmmxt_cmpgtub_M0_wRn(rd1);            break;        case 1:            if (insn & (1 << 21))                gen_op_iwmmxt_cmpgtsw_M0_wRn(rd1);            else                gen_op_iwmmxt_cmpgtuw_M0_wRn(rd1);            break;        case 2:            if (insn & (1 << 21))                gen_op_iwmmxt_cmpgtsl_M0_wRn(rd1);            else                gen_op_iwmmxt_cmpgtul_M0_wRn(rd1);            break;        case 3:            return 1;        }        gen_op_iwmmxt_movq_wRn_M0(wrd);        gen_op_iwmmxt_set_mup();        gen_op_iwmmxt_set_cup();        break;    case 0x00e: case 0x20e: case 0x40e: case 0x60e:	/* WUNPCKEL */    case 0x80e: case 0xa0e: case 0xc0e: case 0xe0e:        wrd = (insn >> 12) & 0xf;        rd0 = (insn >> 16) & 0xf;        gen_op_iwmmxt_movq_M0_wRn(rd0);        switch ((insn >> 22) & 3) {        case 0:            if (insn & (1 << 21))                gen_op_iwmmxt_unpacklsb_M0();            else                gen_op_iwmmxt_unpacklub_M0();            break;        case 1:            if (insn & (1 << 21))                gen_op_iwmmxt_unpacklsw_M0();            else                gen_op_iwmmxt_unpackluw_M0();            break;        case 2:            if (insn & (1 << 21))                gen_op_iwmmxt_unpacklsl_M0();            else                gen_op_iwmmxt_unpacklul_M0();            break;        case 3:            return 1;        }        gen_op_iwmmxt_movq_wRn_M0(wrd);        gen_op_iwmmxt_set_mup();        gen_op_iwmmxt_set_cup();        break;    case 0x00c: case 0x20c: case 0x40c: case 0x60c:	/* WUNPCKEH */    case 0x80c: case 0xa0c: case 0xc0c: case 0xe0c:        wrd = (insn >> 12) & 0xf;        rd0 = (insn >> 16) & 0xf;        gen_op_iwmmxt_movq_M0_wRn(rd0);        switch ((insn >> 22) & 3) {        case 0:            if (insn & (1 << 21))                gen_op_iwmmxt_unpackhsb_M0();            else                gen_op_iwmmxt_unpackhub_M0();            break;        case 1:            if (insn & (1 << 21))                gen_op_iwmmxt_unpackhsw_M0();            else                gen_op_iwmmxt_unpackhuw_M0();            break;        case 2:            if (insn & (1 << 21))                gen_op_iwmmxt_unpackhsl_M0();            else                gen_op_iwmmxt_unpackhul_M0();            break;        case 3:            return 1;        }        gen_op_iwmmxt_movq_wRn_M0(wrd);        gen_op_iwmmxt_set_mup();        gen_op_iwmmxt_set_cup();        break;    case 0x204: case 0x604: case 0xa04: case 0xe04:	/* WSRL */    case 0x214: case 0x614: case 0xa14: case 0xe14:        wrd = (insn >> 12) & 0xf;        rd0 = (insn >> 16) & 0xf;        gen_op_iwmmxt_movq_M0_wRn(rd0);        if (gen_iwmmxt_shift(insn, 0xff))            return 1;        switch ((insn >> 22) & 3) {        case 0:            return 1;        case 1:            gen_helper_iwmmxt_srlw(cpu_M0, cpu_env, cpu_M0, cpu_T[0]);            break;        case 2:            gen_helper_iwmmxt_srll(cpu_M0, cpu_env, cpu_M0, cpu_T[0]);            break;        case 3:            gen_helper_iwmmxt_srlq(cpu_M0, cpu_env, cpu_M0, cpu_T[0]);            break;        }        gen_op_iwmmxt_movq_wRn_M0(wrd);        gen_op_iwmmxt_set_mup();        gen_op_iwmmxt_set_cup();        break;    case 0x004: case 0x404: case 0x804: case 0xc04:	/* WSRA */    case 0x014: case 0x414: case 0x814: case 0xc14:        wrd = (insn >> 12) & 0xf;        rd0 = (insn >> 16) & 0xf;        gen_op_iwmmxt_movq_M0_wRn(rd0);        if (gen_iwmmxt_shift(insn, 0xff))            return 1;        switch ((insn >> 22) & 3) {        case 0:            return 1;        case 1:            gen_helper_iwmmxt_sraw(cpu_M0, cpu_env, cpu_M0, cpu_T[0]);            break;        case 2:            gen_helper_iwmmxt_sral(cpu_M0, cpu_env, cpu_M0, cpu_T[0]);            break;        case 3:            gen_helper_iwmmxt_sraq(cpu_M0, cpu_env, cpu_M0, cpu_T[0]);            break;        }        gen_op_iwmmxt_movq_wRn_M0(wrd);        gen_op_iwmmxt_set_mup();        gen_op_iwmmxt_set_cup();        break;    case 0x104: case 0x504: case 0x904: case 0xd04:	/* WSLL */    case 0x114: case 0x514: case 0x914: case 0xd14:        wrd = (insn >> 12) & 0xf;        rd0 = (insn >> 16) & 0xf;        gen_op_iwmmxt_movq_M0_wRn(rd0);        if (gen_iwmmxt_shift(insn, 0xff))            return 1;        switch ((insn >> 22) & 3) {        case 0:            return 1;        case 1:            gen_helper_iwmmxt_sllw(cpu_M0, cpu_env, cpu_M0, cpu_T[0]);            break;        case 2:            gen_helper_iwmmxt_slll(cpu_M0, cpu_env, cpu_M0, cpu_T[0]);            break;        case 3:            gen_helper_iwmmxt_sllq(cpu_M0, cpu_env, cpu_M0, cpu_T[0]);            break;        }        gen_op_iwmmxt_movq_wRn_M0(wrd);        gen_op_iwmmxt_set_mup();        gen_op_iwmmxt_set_cup();        break;    case 0x304: case 0x704: case 0xb04: case 0xf04:	/* WROR */    case 0x314: case 0x714: case 0xb14: case 0xf14:        wrd = (insn >> 12) & 0xf;        rd0 = (insn >> 16) & 0xf;        gen_op_iwmmxt_movq_M0_wRn(rd0);        switch ((insn >> 22) & 3) {        case 0:            return 1;        case 1:            if (gen_iwmmxt_shift(insn, 0xf))                return 1;            gen_helper_iwmmxt_rorw(cpu_M0, cpu_env, cpu_M0, cpu_T[0]);            break;        case 2:            if (gen_iwmmxt_shift(insn, 0x1f))                return 1;            gen_helper_iwmmxt_rorl(cpu_M0, cpu_env, cpu_M0, cpu_T[0]);            break;        case 3:            if (gen_iwmmxt_shift(insn, 0x3f))                return 1;            gen_helper_iwmmxt_rorq(cpu_M0, cpu_env, cpu_M0, cpu_T[0]);            break;        }        gen_op_iwmmxt_movq_wRn_M0(wrd);        gen_op_iwmmxt_set_mup();        gen_op_iwmmxt_set_cup();        break;    case 0x116: case 0x316: case 0x516: case 0x716:	/* WMIN */    case 0x916: case 0xb16: case 0xd16: case 0xf16:        wrd = (insn >> 12) & 0xf;        rd0 = (insn >> 16) & 0xf;        rd1 = (insn >> 0) & 0xf;        gen_op_iwmmxt_movq_M0_wRn(rd0);        switch ((insn >> 22) & 3) {        case 0:            if (insn & (1 << 21))                gen_op_iwmmxt_minsb_M0_wRn(rd1);            else                gen_op_iwmmxt_minub_M0_wRn(rd1);            break;        case 1:            if (insn & (1 << 21))                gen_op_iwmmxt_minsw_M0_wRn(rd1);            else                gen_op_iwmmxt_minuw_M0_wRn(rd1);            break;        case 2:            if (insn & (1 << 21))                gen_op_iwmmxt_minsl_M0_wRn(rd1);            else                gen_op_iwmmxt_minul_M0_wRn(rd1);            break;        case 3:            return 1;        }        gen_op_iwmmxt_movq_wRn_M0(wrd);        gen_op_iwmmxt_set_mup();        break;    case 0x016: case 0x216: case 0x416: case 0x616:	/* WMAX */    case 0x816: case 0xa16: case 0xc16: case 0xe16:        wrd = (insn >> 12) & 0xf;        rd0 = (insn >> 16) & 0xf;        rd1 = (insn >> 0) & 0xf;        gen_op_iwmmxt_movq_M0_wRn(rd0);        switch ((insn >> 22) & 3) {        case 0:            if (insn & (1 << 21))                gen_op_iwmmxt_maxsb_M0_wRn(rd1);            else                gen_op_iwmmxt_maxub_M0_wRn(rd1);            break;        case 1:            if (insn & (1 << 21))                gen_op_iwmmxt_maxsw_M0_wRn(rd1);            else                gen_op_iwmmxt_maxuw_M0_wRn(rd1);            break;        case 2:            if (insn & (1 << 21))                gen_op_iwmmxt_maxsl_M0_wRn(rd1);            else                gen_op_iwmmxt_maxul_M0_wRn(rd1);            break;        case 3:            return 1;        }        gen_op_iwmmxt_mo

⌨️ 快捷键说明

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