Changeset 67029 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- May 23, 2017 9:42:53 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 115601
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r67028 r67029 11605 11605 IEM_MC_INT_CLEAR_ZMM_256_UP(pXStateTmp, iYRegDstTmp); \ 11606 11606 } while (0) 11607 #define IEM_MC_COPY_YREG_U64_ZX_VLMAX(a_iYRegDst, a_iYRegSrc) \ 11608 do { PX86XSAVEAREA pXStateTmp = IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState); \ 11609 uintptr_t const iYRegDstTmp = (a_iYRegDst); \ 11610 uintptr_t const iYRegSrcTmp = (a_iYRegSrc); \ 11611 pXStateTmp->x87.aXMM[iYRegDstTmp].au64[0] = pXStateTmp->x87.aXMM[iYRegSrcTmp].au64[0]; \ 11612 pXStateTmp->x87.aXMM[iYRegDstTmp].au64[1] = 0; \ 11613 pXStateTmp->u.YmmHi.aYmmHi[iYRegDstTmp].au64[0] = 0; \ 11614 pXStateTmp->u.YmmHi.aYmmHi[iYRegDstTmp].au64[1] = 0; \ 11615 IEM_MC_INT_CLEAR_ZMM_256_UP(pXStateTmp, iYRegDstTmp); \ 11616 } while (0) 11607 11617 11608 11618 #define IEM_MC_MERGE_YREG_U32_U96_ZX_VLMAX(a_iYRegDst, a_iYRegSrc32, a_iYRegSrcHx) \ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r67015 r67029 4601 4601 /** 4602 4602 * @opcode 0x7e 4603 * @opcodesub !11 mr/reg4604 4603 * @oppfx 0xf3 4605 4604 * @opcpuid sse2 4606 4605 * @opgroup og_sse2_pcksclr_datamove 4607 4606 * @opxcpttype 5 4607 * @note Exception type isn't really 5, but close enough... 4608 4608 * @optest op1=1 op2=2 -> op1=2 4609 4609 * @optest op1=0 op2=-42 -> op1=-42 4610 * @oponly 4610 4611 */ 4611 4612 FNIEMOP_DEF(iemOp_movq_Vq_Wq) -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r67016 r67029 2839 2839 } 2840 2840 2841 /** Opcode VEX.F3.0F 0x7e - vmovq Vq, Wq */ 2842 FNIEMOP_STUB(iemOp_vmovq_Vq_Wq); 2841 /** 2842 * @opcode 0x7e 2843 * @oppfx 0xf3 2844 * @opcpuid avx 2845 * @opgroup og_avx_pcksclr_datamove 2846 * @opxcpttype 5 2847 * @note Exception type isn't really 5, but close enough... 2848 * @optest op1=1 op2=2 -> op1=2 2849 * @optest op1=0 op2=-42 -> op1=-42 2850 * @oponly 2851 */ 2852 FNIEMOP_DEF(iemOp_vmovq_Vq_Wq) 2853 { 2854 IEMOP_MNEMONIC2(VEX_RM, VMOVQ, vmovq, Vq_WO, Wq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 2855 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2856 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 2857 { 2858 /* 2859 * Register, register. 2860 */ 2861 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV(); 2862 IEM_MC_BEGIN(0, 0); 2863 2864 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2865 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 2866 2867 IEM_MC_COPY_YREG_U64_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 2868 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 2869 IEM_MC_ADVANCE_RIP(); 2870 IEM_MC_END(); 2871 } 2872 else 2873 { 2874 /* 2875 * Memory, register. 2876 */ 2877 IEM_MC_BEGIN(0, 2); 2878 IEM_MC_LOCAL(uint64_t, uSrc); 2879 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 2880 2881 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 2882 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV(); 2883 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2884 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 2885 2886 IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2887 IEM_MC_STORE_YREG_U64_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 2888 2889 IEM_MC_ADVANCE_RIP(); 2890 IEM_MC_END(); 2891 } 2892 return VINF_SUCCESS; 2893 2894 } 2843 2895 /* Opcode VEX.F2.0F 0x7e - invalid */ 2844 2896 … … 2930 2982 * @optest op1=1 op2=2 -> op1=2 2931 2983 * @optest op1=0 op2=-42 -> op1=-42 2932 * @oponly2933 2984 */ 2934 2985 FNIEMOP_DEF(iemOp_vmovdqu_Wx_Vx)
Note:
See TracChangeset
for help on using the changeset viewer.