VirtualBox

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


Ignore:
Timestamp:
Mar 29, 2017 8:03:19 AM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
114252
Message:

IEM: Implemented movq Wq,Vq (66 0f d6).

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

Legend:

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

    r66314 r66323  
    166166    'Wpd':  ( 'IDX_UseModRM',       'rm',     '%Wpd', 'Wpd',     ),
    167167    'Wdq':  ( 'IDX_UseModRM',       'rm',     '%Wdq', 'Wdq',     ),
     168    'WqZxReg': ( 'IDX_UseModRM',    'rm',     '%Wq',  'Wq',      ),
    168169
    169170    # ModR/M.rm - register only.
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r66321 r66323  
    75487548
    75497549/*  Opcode      0x0f 0xd6 - invalid */
    7550 /** Opcode 0x66 0x0f 0xd6 - vmovq Wq, Vq */
    7551 FNIEMOP_STUB(iemOp_vmovq_Wq_Vq); // NEXT!
     7550
     7551/**
     7552 * @opcode      0xd6
     7553 * @oppfx       0x66
     7554 * @opcpuid     sse2
     7555 * @opgroup     og_sse2_pcksclr_datamove
     7556 * @opxcpttype  none
     7557 * @optest      op1=-1 op2=2 -> op1=2
     7558 * @optest      op1=0 op2=-42 -> op1=-42
     7559 */
     7560FNIEMOP_DEF(iemOp_vmovq_Wq_Vq)
     7561{
     7562    IEMOP_MNEMONIC2(MR, MOVQ, movq, WqZxReg, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     7563    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     7564    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     7565    {
     7566        /*
     7567         * Register, register.
     7568         */
     7569        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     7570        IEM_MC_BEGIN(0, 2);
     7571        IEM_MC_LOCAL(uint64_t,                  uSrc);
     7572
     7573        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     7574        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     7575
     7576        IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     7577        IEM_MC_STORE_XREG_U64_ZX_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, uSrc);
     7578
     7579        IEM_MC_ADVANCE_RIP();
     7580        IEM_MC_END();
     7581    }
     7582    else
     7583    {
     7584        /*
     7585         * Register, memory.
     7586         */
     7587        IEM_MC_BEGIN(0, 2);
     7588        IEM_MC_LOCAL(uint64_t,                  uSrc);
     7589        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     7590
     7591        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     7592        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     7593        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     7594        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
     7595
     7596        IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     7597        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
     7598
     7599        IEM_MC_ADVANCE_RIP();
     7600        IEM_MC_END();
     7601    }
     7602    return VINF_SUCCESS;
     7603}
     7604
     7605
    75527606/** Opcode 0xf3 0x0f 0xd6 - movq2dq Vdq, Nq */
    75537607FNIEMOP_STUB(iemOp_movq2dq_Vdq_Nq);
     
    75637617    {
    75647618        case IEM_OP_PRF_SIZE_OP: /* SSE */
    7565             IEMOP_MNEMONIC(movq_Wq_Vq, "movq Wq,Vq");
     7619            I E M O P _ M N E M O N I C(movq_Wq_Vq, "movq Wq,Vq");
    75667620            IEMOP_HLP_DECODED_NL_2(OP_PMOVMSKB, IEMOPFORM_RM_REG, OP_PARM_Gd, OP_PARM_Vdq, DISOPTYPE_SSE | DISOPTYPE_HARMLESS);
    75677621            IEM_MC_BEGIN(2, 0);
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