VirtualBox

儲存庫 vbox 的更動 67016


忽略:
時間撮記:
2017-5-22 下午12:58:19 (8 年 以前)
作者:
vboxsync
訊息:

IEM: Implemented vmovdqu Wx,Vx (VEX.F3.0F 0x7f).

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h

    r67015 r67016  
    28542854 * @optest      op1=1 op2=2   -> op1=2
    28552855 * @optest      op1=0 op2=-42 -> op1=-42
    2856  * @oponly
    28572856 */
    28582857FNIEMOP_DEF(iemOp_vmovdqa_Wx_Vx)
     
    29232922}
    29242923
    2925 /** Opcode VEX.F3.0F 0x7f - vmovdqu Wx,Vx */
    2926 FNIEMOP_STUB(iemOp_vmovdqu_Wx_Vx);
    2927 //FNIEMOP_DEF(iemOp_vmovdqu_Wx_Vx)
    2928 //{
    2929 //    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    2930 //    IEMOP_MNEMONIC(vmovdqu_Wdq_Vdq, "vmovdqu Wx,Vx");
    2931 //    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    2932 //    {
    2933 //        /*
    2934 //         * Register, register.
    2935 //         */
    2936 //        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2937 //        IEM_MC_BEGIN(0, 0);
    2938 //        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    2939 //        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    2940 //        IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB,
    2941 //                              ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    2942 //        IEM_MC_ADVANCE_RIP();
    2943 //        IEM_MC_END();
    2944 //    }
    2945 //    else
    2946 //    {
    2947 //        /*
    2948 //         * Register, memory.
    2949 //         */
    2950 //        IEM_MC_BEGIN(0, 2);
    2951 //        IEM_MC_LOCAL(RTUINT128U, u128Tmp);
    2952 //        IEM_MC_LOCAL(RTGCPTR,    GCPtrEffSrc);
    2953 //
    2954 //        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    2955 //        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2956 //        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    2957 //        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    2958 //
    2959 //        IEM_MC_FETCH_XREG_U128(u128Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    2960 //        IEM_MC_STORE_MEM_U128(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u128Tmp);
    2961 //
    2962 //        IEM_MC_ADVANCE_RIP();
    2963 //        IEM_MC_END();
    2964 //    }
    2965 //    return VINF_SUCCESS;
    2966 //}
     2924/**
     2925 * @opcode      0x7f
     2926 * @oppfx       0xf3
     2927 * @opcpuid     avx
     2928 * @opgroup     og_avx_simdint_datamove
     2929 * @opxcpttype  4UA
     2930 * @optest      op1=1 op2=2   -> op1=2
     2931 * @optest      op1=0 op2=-42 -> op1=-42
     2932 * @oponly
     2933 */
     2934FNIEMOP_DEF(iemOp_vmovdqu_Wx_Vx)
     2935{
     2936    IEMOP_MNEMONIC2(VEX_MR, VMOVDQU, vmovdqu, Wx_WO, Vx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
     2937    Assert(pVCpu->iem.s.uVexLength <= 1);
     2938    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     2939    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     2940    {
     2941        /*
     2942         * Register, register.
     2943         */
     2944        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV();
     2945        IEM_MC_BEGIN(0, 0);
     2946
     2947        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     2948        IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE();
     2949        if (pVCpu->iem.s.uVexLength == 0)
     2950            IEM_MC_COPY_YREG_U128_ZX_VLMAX((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB,
     2951                                           ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     2952        else
     2953            IEM_MC_COPY_YREG_U256_ZX_VLMAX((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB,
     2954                                           ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     2955        IEM_MC_ADVANCE_RIP();
     2956        IEM_MC_END();
     2957    }
     2958    else if (pVCpu->iem.s.uVexLength == 0)
     2959    {
     2960        /*
     2961         * Register, memory128.
     2962         */
     2963        IEM_MC_BEGIN(0, 2);
     2964        IEM_MC_LOCAL(RTUINT128U, u128Tmp);
     2965        IEM_MC_LOCAL(RTGCPTR,    GCPtrEffSrc);
     2966
     2967        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     2968        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV();
     2969        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     2970        IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ();
     2971
     2972        IEM_MC_FETCH_YREG_U128(u128Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     2973        IEM_MC_STORE_MEM_U128(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u128Tmp);
     2974
     2975        IEM_MC_ADVANCE_RIP();
     2976        IEM_MC_END();
     2977    }
     2978    else
     2979    {
     2980        /*
     2981         * Register, memory256.
     2982         */
     2983        IEM_MC_BEGIN(0, 2);
     2984        IEM_MC_LOCAL(RTUINT256U, u256Tmp);
     2985        IEM_MC_LOCAL(RTGCPTR,    GCPtrEffSrc);
     2986
     2987        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     2988        IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV();
     2989        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     2990        IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ();
     2991
     2992        IEM_MC_FETCH_YREG_U256(u256Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     2993        IEM_MC_STORE_MEM_U256(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u256Tmp);
     2994
     2995        IEM_MC_ADVANCE_RIP();
     2996        IEM_MC_END();
     2997    }
     2998    return VINF_SUCCESS;
     2999}
    29673000
    29683001/*  Opcode VEX.F2.0F 0x7f - invalid */
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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