VirtualBox

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


Ignore:
Timestamp:
May 19, 2017 10:25:44 AM (8 years ago)
Author:
vboxsync
Message:

IEM: Implemented vmovlpd Mq,Vq (VEX.66.0F 13 mod!=3).

File:
1 edited

Legend:

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

    r66966 r66968  
    856856 * @optest      vex.l==1 / op2=0xbbbbbbbbcccccccc4444444433333333ddddddddeeeeeeee2222222211111111
    857857 *              ->         op1=0x4444444433333333444444443333333322222222111111112222222211111111
    858  * @oponly
    859858 */
    860859FNIEMOP_DEF(iemOp_vmovddup_Vx_Wx)
     
    959958 * @optest      op1=1 op2=2 -> op1=2
    960959 * @optest      op1=0 op2=-42 -> op1=-42
     960 * @oponly
    961961 */
    962962FNIEMOP_DEF(iemOp_vmovlps_Mq_Vq)
     
    993993     * @opcpuid     avx
    994994     * @optest      ->
     995    * @oponly
    995996     */
    996997    return IEMOP_RAISE_INVALID_OPCODE();
     
    998999
    9991000
    1000 /** Opcode VEX.66.0F 0x13 - vmovlpd Mq, Vq */
    1001 FNIEMOP_STUB(iemOp_vmovlpd_Mq_Vq);
    1002 //FNIEMOP_DEF(iemOp_vmovlpd_Mq_Vq)
    1003 //{
    1004 //    IEMOP_MNEMONIC(vmovlpd_Mq_Vq, "movlpd Mq,Vq");
    1005 //    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    1006 //    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    1007 //    {
    1008 //#if 0
    1009 //        /*
    1010 //         * Register, register.
    1011 //         */
    1012 //        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1013 //        IEM_MC_BEGIN(0, 1);
    1014 //        IEM_MC_LOCAL(uint64_t,                  uSrc);
    1015 //        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    1016 //        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    1017 //        IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    1018 //        IEM_MC_STORE_XREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, uSrc);
    1019 //        IEM_MC_ADVANCE_RIP();
    1020 //        IEM_MC_END();
    1021 //#else
    1022 //        return IEMOP_RAISE_INVALID_OPCODE();
    1023 //#endif
    1024 //    }
    1025 //    else
    1026 //    {
    1027 //        /*
    1028 //         * Memory, register.
    1029 //         */
    1030 //        IEM_MC_BEGIN(0, 2);
    1031 //        IEM_MC_LOCAL(uint64_t,                  uSrc);
    1032 //        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    1033 //
    1034 //        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    1035 //        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1036 //        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    1037 //        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    1038 //
    1039 //        IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    1040 //        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    1041 //
    1042 //        IEM_MC_ADVANCE_RIP();
    1043 //        IEM_MC_END();
    1044 //    }
    1045 //    return VINF_SUCCESS;
    1046 //}
     1001/**
     1002 * @opcode      0x13
     1003 * @opcodesub   !11 mr/reg
     1004 * @oppfx       0x66
     1005 * @opcpuid     avx
     1006 * @opgroup     og_avx_pcksclr_datamove
     1007 * @opxcpttype  5
     1008 * @optest      op1=1 op2=2 -> op1=2
     1009 * @optest      op1=0 op2=-42 -> op1=-42
     1010 * @oponly
     1011 */
     1012FNIEMOP_DEF(iemOp_vmovlpd_Mq_Vq)
     1013{
     1014    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     1015    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
     1016    {
     1017        IEMOP_MNEMONIC2(VEX_MR_MEM, VMOVLPD, vmovlpd, Mq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_VEX_L_ZERO);
     1018        IEM_MC_BEGIN(0, 2);
     1019        IEM_MC_LOCAL(uint64_t,                  uSrc);
     1020        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     1021
     1022        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1023        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV();
     1024        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     1025        IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ();
     1026
     1027        IEM_MC_FETCH_YREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     1028        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
     1029
     1030        IEM_MC_ADVANCE_RIP();
     1031        IEM_MC_END();
     1032        return VINF_SUCCESS;
     1033    }
     1034
     1035    /**
     1036     * @opdone
     1037     * @opmnemonic  udvex660f13m3
     1038     * @opcode      0x13
     1039     * @opcodesub   11 mr/reg
     1040     * @oppfx       0x66
     1041     * @opunused    immediate
     1042     * @opcpuid     avx
     1043     * @optest      ->
     1044    * @oponly
     1045     */
     1046    return IEMOP_RAISE_INVALID_OPCODE();
     1047}
    10471048
    10481049/*  Opcode VEX.F3.0F 0x13 - invalid */
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