VirtualBox

Changeset 67030 in vbox for trunk/src/VBox


Ignore:
Timestamp:
May 23, 2017 9:54:16 AM (8 years ago)
Author:
vboxsync
Message:

IEM: Implemented movq Wq,Vq (VEX.66.0F d6).

Location:
trunk/src/VBox
Files:
5 edited

Legend:

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

    r67015 r67030  
    233233    'Wdq_WO':       ( 'IDX_UseModRM',       'rm',     '%Wdq', 'Wdq',     ),
    234234    'Wq':           ( 'IDX_UseModRM',       'rm',     '%Wq',  'Wq',      ),
     235    'Wq_WO':        ( 'IDX_UseModRM',       'rm',     '%Wq',  'Wq',      ),
    235236    'WqZxReg_WO':   ( 'IDX_UseModRM',       'rm',     '%Wq',  'Wq',      ),
    236237    'Wx':           ( 'IDX_UseModRM',       'rm',     '%Wx',  'Wx',      ),
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r67029 r67030  
    46044604 * @opcpuid     sse2
    46054605 * @opgroup     og_sse2_pcksclr_datamove
    4606  * @opxcpttype  5
    4607  * @note        Exception type isn't really 5, but close enough...
     4606 * @opxcpttype  none
    46084607 * @optest      op1=1 op2=2 -> op1=2
    46094608 * @optest      op1=0 op2=-42 -> op1=-42
    4610  * @oponly
    46114609 */
    46124610FNIEMOP_DEF(iemOp_movq_Vq_Wq)
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h

    r67029 r67030  
    28442844 * @opcpuid     avx
    28452845 * @opgroup     og_avx_pcksclr_datamove
    2846  * @opxcpttype  5
    2847  * @note        Exception type isn't really 5, but close enough...
     2846 * @opxcpttype  none
    28482847 * @optest      op1=1 op2=2 -> op1=2
    28492848 * @optest      op1=0 op2=-42 -> op1=-42
    2850  * @oponly
    28512849 */
    28522850FNIEMOP_DEF(iemOp_vmovq_Vq_Wq)
     
    33593357
    33603358/**
    3361  * @ opcode      0xd6
    3362  * @ oppfx       0x66
    3363  * @ opcpuid     sse2
    3364  * @ opgroup     og_sse2_pcksclr_datamove
    3365  * @ opxcpttype  none
    3366  * @ optest      op1=-1 op2=2 -> op1=2
    3367  * @ optest      op1=0 op2=-42 -> op1=-42
     3359 * @opcode      0xd6
     3360 * @oppfx       0x66
     3361 * @opcpuid     avx
     3362 * @opgroup     og_avx_pcksclr_datamove
     3363 * @opxcpttype  none
     3364 * @optest      op1=-1 op2=2 -> op1=2
     3365 * @optest      op1=0 op2=-42 -> op1=-42
     3366 * @oponly
    33683367 */
    3369 FNIEMOP_STUB(iemOp_vmovq_Wq_Vq);
    3370 //FNIEMOP_DEF(iemOp_vmovq_Wq_Vq)
    3371 //{
    3372 //    IEMOP_MNEMONIC2(MR, VMOVQ, vmovq, WqZxReg, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    3373 //    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    3374 //    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    3375 //    {
    3376 //        /*
    3377 //         * Register, register.
    3378 //         */
    3379 //        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    3380 //        IEM_MC_BEGIN(0, 2);
    3381 //        IEM_MC_LOCAL(uint64_t,                  uSrc);
    3382 //
    3383 //        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    3384 //        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    3385 //
    3386 //        IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    3387 //        IEM_MC_STORE_XREG_U64_ZX_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, uSrc);
    3388 //
    3389 //        IEM_MC_ADVANCE_RIP();
    3390 //        IEM_MC_END();
    3391 //    }
    3392 //    else
    3393 //    {
    3394 //        /*
    3395 //         * Memory, register.
    3396 //         */
    3397 //        IEM_MC_BEGIN(0, 2);
    3398 //        IEM_MC_LOCAL(uint64_t,                  uSrc);
    3399 //        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    3400 //
    3401 //        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    3402 //        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    3403 //        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    3404 //        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    3405 //
    3406 //        IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    3407 //        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    3408 //
    3409 //        IEM_MC_ADVANCE_RIP();
    3410 //        IEM_MC_END();
    3411 //    }
    3412 //    return VINF_SUCCESS;
    3413 //}
     3368FNIEMOP_DEF(iemOp_vmovq_Wq_Vq)
     3369{
     3370    IEMOP_MNEMONIC2(VEX_MR, VMOVQ, vmovq, Wq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
     3371    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     3372    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     3373    {
     3374        /*
     3375         * Register, register.
     3376         */
     3377        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV();
     3378        IEM_MC_BEGIN(0, 0);
     3379
     3380        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     3381        IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE();
     3382
     3383        IEM_MC_COPY_YREG_U64_ZX_VLMAX((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB,
     3384                                      ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     3385        IEM_MC_ADVANCE_RIP();
     3386        IEM_MC_END();
     3387    }
     3388    else
     3389    {
     3390        /*
     3391         * Memory, register.
     3392         */
     3393        IEM_MC_BEGIN(0, 2);
     3394        IEM_MC_LOCAL(uint64_t,                  uSrc);
     3395        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     3396
     3397        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     3398        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV();
     3399        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     3400        IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ();
     3401
     3402        IEM_MC_FETCH_YREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
     3403        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
     3404
     3405        IEM_MC_ADVANCE_RIP();
     3406        IEM_MC_END();
     3407    }
     3408    return VINF_SUCCESS;
     3409}
    34143410
    34153411/*  Opcode VEX.F3.0F 0xd6 - invalid */
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c

    r67029 r67030  
    12191219        case BS3CG1XCPTTYPE_4:
    12201220            return false;
     1221        case BS3CG1XCPTTYPE_NONE:
    12211222        case BS3CG1XCPTTYPE_3:
    12221223        case BS3CG1XCPTTYPE_4UA:
     
    12421243            return false;
    12431244
     1245        case BS3CG1XCPTTYPE_NONE:
    12441246        case BS3CG1XCPTTYPE_2:
    12451247        case BS3CG1XCPTTYPE_3:
     
    48634865            pThis->aOperands[0].idxFieldBase    = BS3CG1DST_XMM0;
    48644866            pThis->aOperands[1].idxFieldBase    = BS3CG1DST_XMM0;
     4867            break;
     4868
     4869        case BS3CG1ENC_VEX_MODRM_Wq_WO_Vq:
     4870            pThis->pfnEncoder        = Bs3Cg1EncodeNext_VEX_MODRM_WsomethingWO_Vsomething_Wip_L0_OR_ViceVersa;
     4871            pThis->iRegOp            = 1;
     4872            pThis->iRmOp             = 0;
     4873            pThis->aOperands[0].cbOp = 8;
     4874            pThis->aOperands[1].cbOp = 8;
     4875            pThis->aOperands[0].enmLocation     = BS3CG1OPLOC_CTX_ZX_VLMAX;
     4876            pThis->aOperands[0].enmLocationReg  = BS3CG1OPLOC_CTX_ZX_VLMAX;
     4877            pThis->aOperands[0].enmLocationMem  = BS3CG1OPLOC_MEM_WO;
     4878            pThis->aOperands[1].enmLocation     = BS3CG1OPLOC_CTX;
     4879            pThis->aOperands[0].idxFieldBase    = BS3CG1DST_XMM0_LO;
     4880            pThis->aOperands[1].idxFieldBase    = BS3CG1DST_XMM0_LO;
    48654881            break;
    48664882
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h

    r67029 r67030  
    202202    BS3CG1ENC_VEX_MODRM_Wps_WO_Vps,
    203203    BS3CG1ENC_VEX_MODRM_Wpd_WO_Vpd,
     204    BS3CG1ENC_VEX_MODRM_Wq_WO_Vq,
    204205    BS3CG1ENC_VEX_MODRM_Wx_WO_Vx,
    205206
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