Changeset 61059 in vbox
- Timestamp:
- May 19, 2016 7:14:25 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 107326
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r61020 r61059 6436 6436 FNIEMOP_STUB(iemOp_cmpps_Vps_Wps_Ib__cmppd_Vpd_Wpd_Ib__cmpss_Vss_Wss_Ib__cmpsd_Vsd_Wsd_Ib); 6437 6437 6438 6438 6439 /** Opcode 0x0f 0xc3. */ 6440 #if 0 //ndef VBOX_WITH_REM 6441 FNIEMOP_DEF(iemOp_movnti_My_Gy) 6442 { 6443 IEMOP_MNEMONIC("mov Ev,Gv"); 6444 6445 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 6446 6447 /* Only the register -> memory form makes sense, assuming #UD for the other form. */ 6448 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 6449 { 6450 switch (pIemCpu->enmEffOpSize) 6451 { 6452 case IEMMODE_32BIT: 6453 IEM_MC_BEGIN(0, 2); 6454 IEM_MC_LOCAL(uint32_t, u32Value); 6455 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 6456 6457 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6458 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6459 if (!IEM_GET_GUEST_CPU_FEATURES(pIemCpu)->fSse2) 6460 return IEMOP_RAISE_INVALID_OPCODE(); 6461 6462 IEM_MC_FETCH_GREG_U32(u32Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pIemCpu->uRexReg); 6463 IEM_MC_STORE_MEM_U32(pIemCpu->iEffSeg, GCPtrEffDst, u32Value); 6464 IEM_MC_ADVANCE_RIP(); 6465 IEM_MC_END(); 6466 break; 6467 6468 case IEMMODE_64BIT: 6469 IEM_MC_BEGIN(0, 2); 6470 IEM_MC_LOCAL(uint64_t, u64Value); 6471 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 6472 6473 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6474 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6475 if (!IEM_GET_GUEST_CPU_FEATURES(pIemCpu)->fSse2) 6476 return IEMOP_RAISE_INVALID_OPCODE(); 6477 6478 IEM_MC_FETCH_GREG_U64(u64Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pIemCpu->uRexReg); 6479 IEM_MC_STORE_MEM_U64(pIemCpu->iEffSeg, GCPtrEffDst, u64Value); 6480 IEM_MC_ADVANCE_RIP(); 6481 IEM_MC_END(); 6482 break; 6483 6484 case IEMMODE_16BIT: 6485 /** @todo check this form. */ 6486 return IEMOP_RAISE_INVALID_OPCODE(); 6487 } 6488 } 6489 else 6490 return IEMOP_RAISE_INVALID_OPCODE(); 6491 return VINF_SUCCESS; 6492 } 6493 #else 6439 6494 FNIEMOP_STUB(iemOp_movnti_My_Gy); // solaris 10 uses this in hat_pte_zero(). 6495 #endif 6496 6440 6497 6441 6498 /** Opcode 0x0f 0xc4. */ … … 6771 6828 /** Opcode 0x0f 0xe6. */ 6772 6829 FNIEMOP_STUB(iemOp_cvttpd2dq_Vdq_Wdp__cvtdq2pd_Vdq_Wpd__cvtpd2dq_Vdq_Wpd); 6830 6831 6773 6832 /** Opcode 0x0f 0xe7. */ 6833 #if 0 //ndef VBOX_WITH_REM 6834 FNIEMOP_DEF(iemOp_movntq_Mq_Pq__movntdq_Mdq_Vdq) 6835 { 6836 IEMOP_MNEMONIC(!(pIemCpu->fPrefixes & IEM_OP_PRF_SIZE_OP) ? "movntq mr,r" : "movntdq mr,r"); 6837 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 6838 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 6839 { 6840 /* 6841 * Register, memory. 6842 */ 6843 /** @todo check when the REPNZ/Z bits kick in. Same as lock, probably... */ 6844 switch (pIemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 6845 { 6846 6847 case IEM_OP_PRF_SIZE_OP: /* SSE */ 6848 IEM_MC_BEGIN(0, 2); 6849 IEM_MC_LOCAL(uint128_t, uSrc); 6850 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 6851 6852 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 6853 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6854 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 6855 6856 IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pIemCpu->uRexReg); 6857 IEM_MC_STORE_MEM_U128_ALIGN_SSE(pIemCpu->iEffSeg, GCPtrEffSrc, uSrc); 6858 6859 IEM_MC_ADVANCE_RIP(); 6860 IEM_MC_END(); 6861 break; 6862 6863 case 0: /* MMX */ 6864 IEM_MC_BEGIN(0, 2); 6865 IEM_MC_LOCAL(uint64_t, uSrc); 6866 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 6867 6868 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 6869 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6870 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 6871 6872 IEM_MC_FETCH_MREG_U64(uSrc, (bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK); 6873 IEM_MC_STORE_MEM_U64(pIemCpu->iEffSeg, GCPtrEffSrc, uSrc); 6874 6875 IEM_MC_ADVANCE_RIP(); 6876 IEM_MC_END(); 6877 break; 6878 6879 default: 6880 return IEMOP_RAISE_INVALID_OPCODE(); 6881 } 6882 } 6883 /* The register, register encoding is invalid. */ 6884 else 6885 return IEMOP_RAISE_INVALID_OPCODE(); 6886 return VINF_SUCCESS; 6887 } 6888 #else 6774 6889 FNIEMOP_STUB(iemOp_movntq_Mq_Pq__movntdq_Mdq_Vdq); 6890 #endif 6891 6892 6775 6893 /** Opcode 0x0f 0xe8. */ 6776 6894 FNIEMOP_STUB(iemOp_psubsb_Pq_Qq__psubsb_Vdq_Wdq);
Note:
See TracChangeset
for help on using the changeset viewer.