VirtualBox

Changeset 66303 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Mar 28, 2017 2:22:58 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
114231
Message:

IEM: Implemented movupd Wpd,Vpd (66 0f 11).

Location:
trunk/src/VBox/VMM/VMMAll
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py

    r66283 r66303  
    161161    'Ew':   ( 'IDX_UseModRM',       'rm',     '%Ew',  'Ew',      ),
    162162    'Ev':   ( 'IDX_UseModRM',       'rm',     '%Ev',  'Ev',      ),
    163     'Wsd':  ( 'IDX_UseModRM',       'rm',     '%Wsd', 'Wsd',      ),
    164     'Wps':  ( 'IDX_UseModRM',       'rm',     '%Wps', 'Wps',      ),
     163    'Wsd':  ( 'IDX_UseModRM',       'rm',     '%Wsd', 'Wsd',     ),
     164    'Wps':  ( 'IDX_UseModRM',       'rm',     '%Wps', 'Wps',     ),
     165    'Wpd':  ( 'IDX_UseModRM',       'rm',     '%Wpd', 'Wpd',     ),
    165166
    166167    # ModR/M.rm - memory only.
     
    173174    'Vsd':  ( 'IDX_UseModRM',       'reg',    '%Vsd', 'Vsd',     ),
    174175    'Vps':  ( 'IDX_UseModRM',       'reg',    '%Vps', 'Vps',     ),
     176    'Vpd':  ( 'IDX_UseModRM',       'reg',    '%Vpd', 'Vpd',     ),
    175177
    176178    # Immediate values.
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r66283 r66303  
    10791079 * @opcode      0x11
    10801080 * @oppfx       none
     1081 * @opcpuid     sse
     1082 * @opgroup     og_sse2_pcksclr_datamov
     1083 * @opxcpttype  4UA
     1084 * @optest      op1=1 op2=2 -> op1=2
     1085 * @optest      op1=0 op2=-42 -> op1=-42
     1086 * @oponlytest
     1087 */
     1088FNIEMOP_DEF(iemOp_vmovups_Wps_Vps)
     1089{
     1090    IEMOP_MNEMONIC2(MR, MOVUPS, movups, Wps, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1091    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     1092    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     1093    {
     1094        /*
     1095         * Register, register.
     1096         */
     1097        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1098        IEM_MC_BEGIN(0, 0);
     1099        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     1100        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     1101        IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB,
     1102                              ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     1103        IEM_MC_ADVANCE_RIP();
     1104        IEM_MC_END();
     1105    }
     1106    else
     1107    {
     1108        /*
     1109         * Memory, register.
     1110         */
     1111        IEM_MC_BEGIN(0, 2);
     1112        IEM_MC_LOCAL(uint128_t,                 uSrc); /** @todo optimize this one day... */
     1113        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     1114
     1115        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1116        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1117        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     1118        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
     1119
     1120        IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     1121        IEM_MC_STORE_MEM_U128(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
     1122
     1123        IEM_MC_ADVANCE_RIP();
     1124        IEM_MC_END();
     1125    }
     1126    return VINF_SUCCESS;
     1127}
     1128
     1129
     1130/**
     1131 * @opcode      0x11
     1132 * @oppfx       0x66
    10811133 * @opcpuid     sse2
    10821134 * @opgroup     og_sse2_pcksclr_datamov
     
    10861138 * @oponlytest
    10871139 */
    1088 FNIEMOP_DEF(iemOp_vmovups_Wps_Vps)
    1089 {
    1090     IEMOP_MNEMONIC2(MR, MOVUPS, movups, Wps, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1140FNIEMOP_DEF(iemOp_vmovupd_Wpd_Vpd)
     1141{
     1142    IEMOP_MNEMONIC2(MR, MOVUPD, movupd, Wpd, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    10911143    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    10921144    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    10971149        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    10981150        IEM_MC_BEGIN(0, 0);
    1099         IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     1151        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    11001152        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    11011153        IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB,
     
    11151167        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    11161168        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1117         IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     1169        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    11181170        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    11191171
     
    11271179}
    11281180
    1129 
    1130 /** Opcode 0x66 0x0f 0x11 - vmovupd Wpd,Vpd */
    1131 FNIEMOP_STUB(iemOp_vmovupd_Wpd_Vpd);
    11321181
    11331182/** Opcode 0xf3 0x0f 0x11 - vmovss Wss, Hx, Vss */
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