Changeset 66743 in vbox
- Timestamp:
- May 2, 2017 10:23:24 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 115150
- Location:
- trunk/src/VBox
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r66582 r66743 990 990 991 991 992 /** Opcode 0x0f 0x10 - vmovups Vps, Wps */ 993 FNIEMOP_STUB(iemOp_movups_Vps_Wps); 992 /** 993 * @opcode 0x10 994 * @oppfx none 995 * @opcpuid sse 996 * @opgroup og_sse_simdfp_datamove 997 * @opxcpttype 4UA 998 * @optest op1=1 op2=2 -> op1=2 999 * @optest op1=0 op2=-22 -> op1=-22 1000 */ 1001 FNIEMOP_DEF(iemOp_movups_Vps_Wps) 1002 { 1003 IEMOP_MNEMONIC2(RM, MOVUPS, movups, Vps, Wps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 1004 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1005 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1006 { 1007 /* 1008 * Register, register. 1009 */ 1010 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1011 IEM_MC_BEGIN(0, 0); 1012 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1013 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1014 IEM_MC_COPY_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 1015 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1016 IEM_MC_ADVANCE_RIP(); 1017 IEM_MC_END(); 1018 } 1019 else 1020 { 1021 /* 1022 * Memory, register. 1023 */ 1024 IEM_MC_BEGIN(0, 2); 1025 IEM_MC_LOCAL(RTUINT128U, uSrc); /** @todo optimize this one day... */ 1026 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1027 1028 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1029 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1030 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1031 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1032 1033 IEM_MC_FETCH_MEM_U128(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1034 IEM_MC_STORE_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 1035 1036 IEM_MC_ADVANCE_RIP(); 1037 IEM_MC_END(); 1038 } 1039 return VINF_SUCCESS; 1040 1041 } 1042 1043 994 1044 /** Opcode 0x66 0x0f 0x10 - vmovupd Vpd, Wpd */ 995 1045 FNIEMOP_STUB(iemOp_movupd_Vpd_Wpd); -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c
r66464 r66743 1660 1660 1661 1661 1662 static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_BS3CG1ENC_MODRM_Vps_Wps(PBS3CG1STATE pThis, unsigned iEncoding) 1663 { 1664 unsigned off; 1665 if (iEncoding == 0) 1666 { 1667 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1668 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 0); 1669 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_XMM0; 1670 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM1; 1671 } 1672 else if (iEncoding == 1) 1673 { 1674 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM2; 1675 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1676 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 2 /*iReg*/, 16, 0, BS3CG1OPLOC_MEM); 1677 } 1678 else if (iEncoding == 2) 1679 { 1680 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3; 1681 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1682 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMissalign*/, BS3CG1OPLOC_MEM); 1683 if (!Bs3Cg1XcptTypeIsUnaligned(pThis->enmXcptType)) 1684 pThis->bAlignmentXcpt = X86_XCPT_GP; 1685 } 1686 else 1687 return 0; 1688 pThis->cbCurInstr = off; 1689 return iEncoding + 1; 1690 } 1691 1692 1662 1693 static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_BS3CG1ENC_MODRM_VssZxReg_Wss(PBS3CG1STATE pThis, unsigned iEncoding) 1663 1694 { … … 2069 2100 case BS3CG1ENC_MODRM_Vdq_Wdq: 2070 2101 return Bs3Cg1EncodeNext_BS3CG1ENC_MODRM_Vdq_Wdq(pThis, iEncoding); 2102 case BS3CG1ENC_MODRM_Vps_Wps: 2103 return Bs3Cg1EncodeNext_BS3CG1ENC_MODRM_Vps_Wps(pThis, iEncoding); 2071 2104 case BS3CG1ENC_MODRM_VssZxReg_Wss: 2072 2105 return Bs3Cg1EncodeNext_BS3CG1ENC_MODRM_VssZxReg_Wss(pThis, iEncoding); … … 2209 2242 2210 2243 case BS3CG1ENC_MODRM_Vdq_Wdq: 2244 pThis->iRmOp = 1; 2245 pThis->iRegOp = 0; 2246 pThis->aOperands[0].cbOp = 16; 2247 pThis->aOperands[1].cbOp = 16; 2248 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX; 2249 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX; 2250 break; 2251 2252 case BS3CG1ENC_MODRM_Vps_Wps: 2211 2253 pThis->iRmOp = 1; 2212 2254 pThis->iRegOp = 0; -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h
r66464 r66743 105 105 BS3CG1ENC_MODRM_Vq_Mq, 106 106 BS3CG1ENC_MODRM_Vdq_Wdq, 107 BS3CG1ENC_MODRM_Vps_Wps, 107 108 BS3CG1ENC_MODRM_VssZxReg_Wss, 108 109 BS3CG1ENC_MODRM_MbRO,
Note:
See TracChangeset
for help on using the changeset viewer.