Changeset 65757 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Feb 13, 2017 9:27:54 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r65756 r65757 7956 7956 7957 7957 7958 /** Opcode 0x0f 0xe7. */ 7959 FNIEMOP_DEF(iemOp_movntq_Mq_Pq__movntdq_Mdq_Vdq) 7960 { 7958 /** Opcode 0x0f 0xe7 - movntq Mq, Pq */ 7959 FNIEMOP_DEF(iemOp_movntq_Mq_Pq) 7960 { 7961 IEMOP_MNEMONIC(movntq_Mq_Pq, "movntq Mq,Pq"); 7961 7962 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 7962 7963 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 7963 7964 { 7964 /* 7965 * Register, memory. 7966 */ 7967 /** @todo check when the REPNZ/Z bits kick in. Same as lock, probably... */ 7968 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 7969 { 7970 7971 case IEM_OP_PRF_SIZE_OP: /* SSE */ 7972 IEMOP_MNEMONIC(movntq_Mq_Pq, "movntq Mq,Pq"); 7973 IEM_MC_BEGIN(0, 2); 7974 IEM_MC_LOCAL(uint128_t, uSrc); 7975 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 7976 7977 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 7978 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7979 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 7980 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 7981 7982 IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 7983 IEM_MC_STORE_MEM_U128_ALIGN_SSE(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 7984 7985 IEM_MC_ADVANCE_RIP(); 7986 IEM_MC_END(); 7987 break; 7988 7989 case 0: /* MMX */ 7990 IEMOP_MNEMONIC(movntdq_Mdq_Vdq, "movntdq Mdq,Vdq"); 7991 IEM_MC_BEGIN(0, 2); 7992 IEM_MC_LOCAL(uint64_t, uSrc); 7993 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 7994 7995 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 7996 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7997 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 7998 IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ(); 7999 8000 IEM_MC_FETCH_MREG_U64(uSrc, (bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK); 8001 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 8002 8003 IEM_MC_ADVANCE_RIP(); 8004 IEM_MC_END(); 8005 break; 8006 8007 default: 8008 return IEMOP_RAISE_INVALID_OPCODE(); 8009 } 7965 /* Register, memory. */ 7966 IEM_MC_BEGIN(0, 2); 7967 IEM_MC_LOCAL(uint64_t, uSrc); 7968 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 7969 7970 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 7971 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7972 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 7973 IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ(); 7974 7975 IEM_MC_FETCH_MREG_U64(uSrc, (bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK); 7976 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 7977 7978 IEM_MC_ADVANCE_RIP(); 7979 IEM_MC_END(); 7980 return VINF_SUCCESS; 8010 7981 } 8011 7982 /* The register, register encoding is invalid. */ 8012 else 8013 return IEMOP_RAISE_INVALID_OPCODE(); 8014 return VINF_SUCCESS; 8015 } 7983 return IEMOP_RAISE_INVALID_OPCODE(); 7984 } 7985 7986 /** Opcode 0x66 0x0f 0xe7 - vmovntdq Mx, Vx */ 7987 FNIEMOP_DEF(iemOp_vmovntdq_Mx_Vx) 7988 { 7989 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 7990 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 7991 { 7992 /* Register, memory. */ 7993 IEMOP_MNEMONIC(vmovntdq_Mx_Vx, "vmovntdq Mx,Vx"); 7994 IEM_MC_BEGIN(0, 2); 7995 IEM_MC_LOCAL(uint128_t, uSrc); 7996 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 7997 7998 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 7999 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8000 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 8001 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 8002 8003 IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 8004 IEM_MC_STORE_MEM_U128_ALIGN_SSE(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 8005 8006 IEM_MC_ADVANCE_RIP(); 8007 IEM_MC_END(); 8008 return VINF_SUCCESS; 8009 } 8010 8011 /* The register, register encoding is invalid. */ 8012 return IEMOP_RAISE_INVALID_OPCODE(); 8013 } 8014 8015 /* Opcode 0xf3 0x0f 0xe7 - invalid */ 8016 /* Opcode 0xf2 0x0f 0xe7 - invalid */ 8016 8017 8017 8018 … … 8445 8446 /* 0xe5 */ iemOp_pmulhw_Pq_Qq, iemOp_vpmulhw_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 8446 8447 /* 0xe6 */ iemOp_InvalidNeedRM, iemOp_vcvttpd2dq_Vx_Wpd, iemOp_vcvtdq2pd_Vx_Wpd, iemOp_vcvtpd2dq_Vx_Wpd, 8447 /* 0xe7 */ iemOp_movntq_Mq_Pq __movntdq_Mdq_Vdq, iemOp_movntq_Mq_Pq__movntdq_Mdq_Vdq, iemOp_InvalidNeedRM,iemOp_InvalidNeedRM,8448 /* 0xe7 */ iemOp_movntq_Mq_Pq, iemOp_vmovntdq_Mx_Vx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 8448 8449 /* 0xe8 */ iemOp_psubsb_Pq_Qq, iemOp_vpsubsb_Vx_Hx_W, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 8449 8450 /* 0xe9 */ iemOp_psubsw_Pq_Qq, iemOp_vpsubsw_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM,
Note:
See TracChangeset
for help on using the changeset viewer.