VirtualBox

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


Ignore:
Timestamp:
May 23, 2017 9:42:53 AM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
115601
Message:

IEM: Implemented movq Vq,Wq (VEX.F3.0F 7e).

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

Legend:

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

    r67028 r67029  
    1160511605         IEM_MC_INT_CLEAR_ZMM_256_UP(pXStateTmp, iYRegDstTmp); \
    1160611606    } while (0)
     11607#define IEM_MC_COPY_YREG_U64_ZX_VLMAX(a_iYRegDst, a_iYRegSrc) \
     11608    do { PX86XSAVEAREA   pXStateTmp     = IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState); \
     11609         uintptr_t const iYRegDstTmp    = (a_iYRegDst); \
     11610         uintptr_t const iYRegSrcTmp    = (a_iYRegSrc); \
     11611         pXStateTmp->x87.aXMM[iYRegDstTmp].au64[0]       = pXStateTmp->x87.aXMM[iYRegSrcTmp].au64[0]; \
     11612         pXStateTmp->x87.aXMM[iYRegDstTmp].au64[1]       = 0; \
     11613         pXStateTmp->u.YmmHi.aYmmHi[iYRegDstTmp].au64[0] = 0; \
     11614         pXStateTmp->u.YmmHi.aYmmHi[iYRegDstTmp].au64[1] = 0; \
     11615         IEM_MC_INT_CLEAR_ZMM_256_UP(pXStateTmp, iYRegDstTmp); \
     11616    } while (0)
    1160711617
    1160811618#define IEM_MC_MERGE_YREG_U32_U96_ZX_VLMAX(a_iYRegDst, a_iYRegSrc32, a_iYRegSrcHx) \
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r67015 r67029  
    46014601/**
    46024602 * @opcode      0x7e
    4603  * @opcodesub   !11 mr/reg
    46044603 * @oppfx       0xf3
    46054604 * @opcpuid     sse2
    46064605 * @opgroup     og_sse2_pcksclr_datamove
    46074606 * @opxcpttype  5
     4607 * @note        Exception type isn't really 5, but close enough...
    46084608 * @optest      op1=1 op2=2 -> op1=2
    46094609 * @optest      op1=0 op2=-42 -> op1=-42
     4610 * @oponly
    46104611 */
    46114612FNIEMOP_DEF(iemOp_movq_Vq_Wq)
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h

    r67016 r67029  
    28392839}
    28402840
    2841 /** Opcode VEX.F3.0F 0x7e - vmovq Vq, Wq */
    2842 FNIEMOP_STUB(iemOp_vmovq_Vq_Wq);
     2841/**
     2842 * @opcode      0x7e
     2843 * @oppfx       0xf3
     2844 * @opcpuid     avx
     2845 * @opgroup     og_avx_pcksclr_datamove
     2846 * @opxcpttype  5
     2847 * @note        Exception type isn't really 5, but close enough...
     2848 * @optest      op1=1 op2=2 -> op1=2
     2849 * @optest      op1=0 op2=-42 -> op1=-42
     2850 * @oponly
     2851 */
     2852FNIEMOP_DEF(iemOp_vmovq_Vq_Wq)
     2853{
     2854    IEMOP_MNEMONIC2(VEX_RM, VMOVQ, vmovq, Vq_WO, Wq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
     2855    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     2856    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     2857    {
     2858        /*
     2859         * Register, register.
     2860         */
     2861        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV();
     2862        IEM_MC_BEGIN(0, 0);
     2863
     2864        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     2865        IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE();
     2866
     2867        IEM_MC_COPY_YREG_U64_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg,
     2868                                      (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB);
     2869        IEM_MC_ADVANCE_RIP();
     2870        IEM_MC_END();
     2871    }
     2872    else
     2873    {
     2874        /*
     2875         * Memory, register.
     2876         */
     2877        IEM_MC_BEGIN(0, 2);
     2878        IEM_MC_LOCAL(uint64_t,                  uSrc);
     2879        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     2880
     2881        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     2882        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV();
     2883        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     2884        IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE();
     2885
     2886        IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     2887        IEM_MC_STORE_YREG_U64_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc);
     2888
     2889        IEM_MC_ADVANCE_RIP();
     2890        IEM_MC_END();
     2891    }
     2892    return VINF_SUCCESS;
     2893
     2894}
    28432895/*  Opcode VEX.F2.0F 0x7e - invalid */
    28442896
     
    29302982 * @optest      op1=1 op2=2   -> op1=2
    29312983 * @optest      op1=0 op2=-42 -> op1=-42
    2932  * @oponly
    29332984 */
    29342985FNIEMOP_DEF(iemOp_vmovdqu_Wx_Vx)
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