VirtualBox

Changeset 66743 in vbox


Ignore:
Timestamp:
May 2, 2017 10:23:24 AM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
115150
Message:

IEM: Implemented movups Vps,Wps (0x0f 0x10).

Location:
trunk/src/VBox
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r66582 r66743  
    990990
    991991
    992 /** Opcode      0x0f 0x10 - vmovups Vps, Wps */
    993 FNIEMOP_STUB(iemOp_movups_Vps_Wps);
     992/**
     993 * @opcode      0x10
     994 * @oppfx       none
     995 * @opcpuid     sse
     996 * @opgroup     og_sse_simdfp_datamove
     997 * @opxcpttype  4UA
     998 * @optest      op1=1 op2=2 -> op1=2
     999 * @optest      op1=0 op2=-22 -> op1=-22
     1000 */
     1001FNIEMOP_DEF(iemOp_movups_Vps_Wps)
     1002{
     1003    IEMOP_MNEMONIC2(RM, MOVUPS, movups, Vps, Wps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1004    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     1005    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     1006    {
     1007        /*
     1008         * Register, register.
     1009         */
     1010        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1011        IEM_MC_BEGIN(0, 0);
     1012        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     1013        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     1014        IEM_MC_COPY_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg,
     1015                              (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB);
     1016        IEM_MC_ADVANCE_RIP();
     1017        IEM_MC_END();
     1018    }
     1019    else
     1020    {
     1021        /*
     1022         * Memory, register.
     1023         */
     1024        IEM_MC_BEGIN(0, 2);
     1025        IEM_MC_LOCAL(RTUINT128U,                uSrc); /** @todo optimize this one day... */
     1026        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     1027
     1028        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1029        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1030        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     1031        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     1032
     1033        IEM_MC_FETCH_MEM_U128(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     1034        IEM_MC_STORE_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc);
     1035
     1036        IEM_MC_ADVANCE_RIP();
     1037        IEM_MC_END();
     1038    }
     1039    return VINF_SUCCESS;
     1040
     1041}
     1042
     1043
    9941044/** Opcode 0x66 0x0f 0x10 - vmovupd Vpd, Wpd */
    9951045FNIEMOP_STUB(iemOp_movupd_Vpd_Wpd);
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c

    r66464 r66743  
    16601660
    16611661
     1662static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_BS3CG1ENC_MODRM_Vps_Wps(PBS3CG1STATE pThis, unsigned iEncoding)
     1663{
     1664    unsigned off;
     1665    if (iEncoding == 0)
     1666    {
     1667        off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0));
     1668        pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 0);
     1669        pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_XMM0;
     1670        pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM1;
     1671    }
     1672    else if (iEncoding == 1)
     1673    {
     1674        pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM2;
     1675        off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0));
     1676        off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 2 /*iReg*/, 16, 0, BS3CG1OPLOC_MEM);
     1677    }
     1678    else if (iEncoding == 2)
     1679    {
     1680        pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3;
     1681        off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0));
     1682        off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMissalign*/, BS3CG1OPLOC_MEM);
     1683        if (!Bs3Cg1XcptTypeIsUnaligned(pThis->enmXcptType))
     1684            pThis->bAlignmentXcpt = X86_XCPT_GP;
     1685    }
     1686    else
     1687        return 0;
     1688    pThis->cbCurInstr = off;
     1689    return iEncoding + 1;
     1690}
     1691
     1692
    16621693static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_BS3CG1ENC_MODRM_VssZxReg_Wss(PBS3CG1STATE pThis, unsigned iEncoding)
    16631694{
     
    20692100        case BS3CG1ENC_MODRM_Vdq_Wdq:
    20702101            return Bs3Cg1EncodeNext_BS3CG1ENC_MODRM_Vdq_Wdq(pThis, iEncoding);
     2102        case BS3CG1ENC_MODRM_Vps_Wps:
     2103            return Bs3Cg1EncodeNext_BS3CG1ENC_MODRM_Vps_Wps(pThis, iEncoding);
    20712104        case BS3CG1ENC_MODRM_VssZxReg_Wss:
    20722105            return Bs3Cg1EncodeNext_BS3CG1ENC_MODRM_VssZxReg_Wss(pThis, iEncoding);
     
    22092242
    22102243        case BS3CG1ENC_MODRM_Vdq_Wdq:
     2244            pThis->iRmOp             = 1;
     2245            pThis->iRegOp            = 0;
     2246            pThis->aOperands[0].cbOp = 16;
     2247            pThis->aOperands[1].cbOp = 16;
     2248            pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX;
     2249            pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX;
     2250            break;
     2251
     2252        case BS3CG1ENC_MODRM_Vps_Wps:
    22112253            pThis->iRmOp             = 1;
    22122254            pThis->iRegOp            = 0;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h

    r66464 r66743  
    105105    BS3CG1ENC_MODRM_Vq_Mq,
    106106    BS3CG1ENC_MODRM_Vdq_Wdq,
     107    BS3CG1ENC_MODRM_Vps_Wps,
    107108    BS3CG1ENC_MODRM_VssZxReg_Wss,
    108109    BS3CG1ENC_MODRM_MbRO,
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette