VirtualBox

Changeset 66744 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
May 2, 2017 11:28:41 AM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
115152
Message:

IEM: Implemented movupd Vpd,Wpd (0x66 0x0f 0x10).

File:
1 edited

Legend:

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

    r66743 r66744  
    10421042
    10431043
    1044 /** Opcode 0x66 0x0f 0x10 - vmovupd Vpd, Wpd */
    1045 FNIEMOP_STUB(iemOp_movupd_Vpd_Wpd);
     1044/**
     1045 * @opcode      0x10
     1046 * @oppfx       0x66
     1047 * @opcpuid     sse2
     1048 * @opgroup     og_sse2_pcksclr_datamove
     1049 * @opxcpttype  4UA
     1050 * @optest      op1=1 op2=2 -> op1=2
     1051 * @optest      op1=0 op2=-42 -> op1=-42
     1052 * @oponlytest
     1053 */
     1054FNIEMOP_DEF(iemOp_movupd_Vpd_Wpd)
     1055{
     1056    IEMOP_MNEMONIC2(RM, MOVUPD, movupd, Vpd, Wpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1057    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     1058    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     1059    {
     1060        /*
     1061         * Register, register.
     1062         */
     1063        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1064        IEM_MC_BEGIN(0, 0);
     1065        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     1066        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     1067        IEM_MC_COPY_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg,
     1068                              (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB);
     1069        IEM_MC_ADVANCE_RIP();
     1070        IEM_MC_END();
     1071    }
     1072    else
     1073    {
     1074        /*
     1075         * Memory, register.
     1076         */
     1077        IEM_MC_BEGIN(0, 2);
     1078        IEM_MC_LOCAL(RTUINT128U,                uSrc); /** @todo optimize this one day... */
     1079        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     1080
     1081        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1082        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1083        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     1084        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     1085
     1086        IEM_MC_FETCH_MEM_U128(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     1087        IEM_MC_STORE_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc);
     1088
     1089        IEM_MC_ADVANCE_RIP();
     1090        IEM_MC_END();
     1091    }
     1092    return VINF_SUCCESS;
     1093}
    10461094
    10471095
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