VirtualBox

Changeset 66745 in vbox for trunk


Ignore:
Timestamp:
May 2, 2017 11:36:57 AM (7 years ago)
Author:
vboxsync
Message:

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

File:
1 edited

Legend:

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

    r66744 r66745  
    11481148
    11491149
    1150 /** Opcode 0xf2 0x0f 0x10 - movsd Vx, Wsd */
    1151 FNIEMOP_STUB(iemOp_movsd_Vx_Wsd);
     1150/**
     1151 * @opcode      0x10
     1152 * @oppfx       0xf2
     1153 * @opcpuid     sse2
     1154 * @opgroup     og_sse2_pcksclr_datamove
     1155 * @opxcpttype  5
     1156 * @optest      op1=1 op2=2 -> op1=2
     1157 * @optest      op1=0 op2=-42 -> op1=-42
     1158 */
     1159FNIEMOP_DEF(iemOp_movsd_Vx_Wsd)
     1160{
     1161    IEMOP_MNEMONIC2(RM, MOVSD, movsd, VsdZxReg, Wsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1162    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     1163    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     1164    {
     1165        /*
     1166         * Register, register.
     1167         */
     1168        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1169        IEM_MC_BEGIN(0, 1);
     1170        IEM_MC_LOCAL(uint64_t,                  uSrc);
     1171
     1172        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     1173        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     1174        IEM_MC_FETCH_XREG_U64(uSrc, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB);
     1175        IEM_MC_STORE_XREG_U64_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc);
     1176
     1177        IEM_MC_ADVANCE_RIP();
     1178        IEM_MC_END();
     1179    }
     1180    else
     1181    {
     1182        /*
     1183         * Memory, register.
     1184         */
     1185        IEM_MC_BEGIN(0, 2);
     1186        IEM_MC_LOCAL(uint64_t,                  uSrc);
     1187        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     1188
     1189        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1190        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1191        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     1192        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     1193
     1194        IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     1195        IEM_MC_STORE_XREG_U64_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc);
     1196
     1197        IEM_MC_ADVANCE_RIP();
     1198        IEM_MC_END();
     1199    }
     1200    return VINF_SUCCESS;
     1201}
    11521202
    11531203
Note: See TracChangeset for help on using the changeset viewer.

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