Changeset 67007 in vbox
- Timestamp:
- May 22, 2017 11:52:13 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 115569
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/disopcode.h
r67006 r67007 1095 1095 #define OP_PARM_PdZx_WO OP_PARM_Pd /**< Annotates write only operand and zero extends to 64-bit. */ 1096 1096 #define OP_PARM_Pq_WO OP_PARM_Pq /**< Annotates write only operand. */ 1097 #define OP_PARM_Qq_WO OP_PARM_Qq /**< Annotates write only operand. */ 1097 1098 #define OP_PARM_Nq OP_PARM_Qq /**< Missing 'N' class (MMX reg selected by modrm.mem) in disasm. */ 1098 1099 #define OP_PARM_Uq (OP_PARM_U+OP_PARM_q) -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r67006 r67007 218 218 'Ew': ( 'IDX_UseModRM', 'rm', '%Ew', 'Ew', ), 219 219 'Ev': ( 'IDX_UseModRM', 'rm', '%Ev', 'Ev', ), 220 'Qq': ( 'IDX_UseModRM', 'rm', '%Qq', 'Qq', ), 221 'Qq_WO': ( 'IDX_UseModRM', 'rm', '%Qq', 'Qq', ), 220 222 'Wss': ( 'IDX_UseModRM', 'rm', '%Wss', 'Wss', ), 221 223 'Wss_WO': ( 'IDX_UseModRM', 'rm', '%Wss', 'Wss', ), -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r67006 r67007 3666 3666 3667 3667 3668 /** Opcode 0x0f 0x6f - movq Pq, Qq */ 3668 /** 3669 * @opcode 0x6f 3670 * @oppfx none 3671 * @opcpuid sse2 3672 * @opgroup og_mmx_datamove 3673 * @opxcpttype 5 3674 * @optest op1=1 op2=2 -> op1=2 ftw=0xff 3675 * @optest op1=0 op2=-42 -> op1=-42 ftw=0xff 3676 * @oponly 3677 */ 3669 3678 FNIEMOP_DEF(iemOp_movq_Pq_Qq) 3670 3679 { 3671 3680 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 3672 IEMOP_MNEMONIC (movq_Pq_Qq, "movq Pq,Qq");3681 IEMOP_MNEMONIC2(RM, MOVD, movd, Pq_WO, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 3673 3682 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 3674 3683 { … … 3676 3685 * Register, register. 3677 3686 */ 3678 /** @todo testcase: REX.B / REX.R and MMX register indexing. Ignored? */3679 /** @todo testcase: REX.B / REX.R and segment register indexing. Ignored? */3680 3687 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3681 3688 IEM_MC_BEGIN(0, 1); 3682 3689 IEM_MC_LOCAL(uint64_t, u64Tmp); 3690 3683 3691 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 3684 3692 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 3693 3685 3694 IEM_MC_FETCH_MREG_U64(u64Tmp, bRm & X86_MODRM_RM_MASK); 3686 3695 IEM_MC_STORE_MREG_U64((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK, u64Tmp); 3696 IEM_MC_FPU_TO_MMX_MODE(); 3697 3687 3698 IEM_MC_ADVANCE_RIP(); 3688 3699 IEM_MC_END(); … … 3701 3712 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 3702 3713 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 3714 3703 3715 IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 3704 3716 IEM_MC_STORE_MREG_U64((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK, u64Tmp); 3717 IEM_MC_FPU_TO_MMX_MODE(); 3705 3718 3706 3719 IEM_MC_ADVANCE_RIP(); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r67006 r67007 2056 2056 * @optest 64-bit / op1=1 op2=2 -> op1=2 2057 2057 * @optest 64-bit / op1=0 op2=-42 -> op1=-42 2058 * @oponly2059 2058 */ 2060 2059 IEMOP_MNEMONIC2(VEX_RM, VMOVQ, vmovq, Vq_WO, Eq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OZ_PFX); … … 2107 2106 * @optest op1=1 op2=2 -> op1=2 2108 2107 * @optest op1=0 op2=-42 -> op1=-42 2109 * @oponly2110 2108 */ 2111 2109 IEMOP_MNEMONIC2(VEX_RM, VMOVD, vmovd, Vd_WO, Ed, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OZ_PFX); -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c
r67006 r67007 1677 1677 1678 1678 1679 static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_MODRM_Pq_WO_Qq(PBS3CG1STATE pThis, unsigned iEncoding) 1680 { 1681 unsigned off; 1682 switch (iEncoding) 1683 { 1684 case 0: 1685 pThis->aOperands[pThis->iRmOp ].enmLocation = pThis->aOperands[pThis->iRmOp].enmLocationReg; 1686 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1687 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 0); 1688 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 0; 1689 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 1; 1690 break; 1691 case 1: 1692 pThis->aOperands[pThis->iRmOp ].enmLocation = pThis->aOperands[pThis->iRmOp].enmLocationReg; 1693 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1694 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 4, 7); 1695 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 7; 1696 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 4; 1697 iEncoding += !BS3CG1_IS_64BIT_TARGET(pThis) ? 1 : 0; 1698 break; 1699 #if ARCH_BITS == 64 1700 case 2: 1701 off = Bs3Cg1InsertReqPrefix(pThis, 0); 1702 pThis->abCurInstr[off++] = REX__RBX; 1703 off = Bs3Cg1InsertOpcodes(pThis, off); 1704 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 6, 2); 1705 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 2; /* no +8*/ 1706 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 6; /* no +8*/ 1707 break; 1708 #endif 1709 case 3: 1710 pThis->aOperands[pThis->iRmOp ].enmLocation = pThis->aOperands[pThis->iRmOp].enmLocationMem; 1711 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1712 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 4 /*iReg*/, 0 /*cbMisalign*/); 1713 break; 1714 case 4: 1715 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1716 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 7 /*iReg*/, 1 /*cbMisalign*/); 1717 iEncoding += !BS3CG1_IS_64BIT_TARGET(pThis) ? 1 : 0; 1718 break; 1719 #if ARCH_BITS == 64 1720 case 5: 1721 off = Bs3Cg1InsertReqPrefix(pThis, 0); 1722 pThis->abCurInstr[off++] = REX__RBX; 1723 off = Bs3Cg1InsertOpcodes(pThis, off); 1724 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 7 /*iReg - no +8*/, 0 /*cbMisalign*/); 1725 break; 1726 #endif 1727 1728 default: 1729 return 0; 1730 } 1731 1732 pThis->cbCurInstr = off; 1733 return iEncoding + 1; 1734 } 1735 1736 1679 1737 static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_MODRM_Pq_WO_Uq(PBS3CG1STATE pThis, unsigned iEncoding) 1680 1738 { … … 4184 4242 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX; 4185 4243 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX; 4244 break; 4245 4246 case BS3CG1ENC_MODRM_Pq_WO_Qq: 4247 pThis->pfnEncoder = Bs3Cg1EncodeNext_MODRM_Pq_WO_Qq; 4248 pThis->iRegOp = 0; 4249 pThis->iRmOp = 1; 4250 pThis->aOperands[0].cbOp = 8; 4251 pThis->aOperands[1].cbOp = 8; 4252 pThis->aOperands[0].idxFieldBase = BS3CG1DST_MM0; 4253 pThis->aOperands[1].idxFieldBase = BS3CG1DST_MM0; 4254 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX; 4255 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX; 4256 pThis->aOperands[1].enmLocationReg = BS3CG1OPLOC_CTX; 4257 pThis->aOperands[1].enmLocationMem = BS3CG1OPLOC_MEM; 4186 4258 break; 4187 4259 -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h
r67006 r67007 46 46 BS3CG1OP_Eq, 47 47 BS3CG1OP_Ev, 48 BS3CG1OP_Qq, 49 BS3CG1OP_Qq_WO, 48 50 BS3CG1OP_Wss, 49 51 BS3CG1OP_Wss_WO, … … 133 135 BS3CG1ENC_MODRM_Eb_Gb, 134 136 BS3CG1ENC_MODRM_Ev_Gv, 137 BS3CG1ENC_MODRM_Pq_WO_Qq, 135 138 BS3CG1ENC_MODRM_Wss_WO_Vss, 136 139 BS3CG1ENC_MODRM_Wsd_WO_Vsd,
Note:
See TracChangeset
for help on using the changeset viewer.