Changeset 67015 in vbox for trunk/src/VBox
- Timestamp:
- May 22, 2017 12:56:18 PM (8 years ago)
- Location:
- trunk/src/VBox
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r67012 r67015 235 235 'WqZxReg_WO': ( 'IDX_UseModRM', 'rm', '%Wq', 'Wq', ), 236 236 'Wx': ( 'IDX_UseModRM', 'rm', '%Wx', 'Wx', ), 237 'Wx_WO': ( 'IDX_UseModRM', 'rm', '%Wx', 'Wx', ), 237 238 238 239 # ModR/M.rm - register only. … … 286 287 'VqHi_WO': ( 'IDX_UseModRM', 'reg', '%Vdq', 'VdqHi', ), 287 288 'VqZx_WO': ( 'IDX_UseModRM', 'reg', '%Vq', 'VqZx', ), 289 'Vx': ( 'IDX_UseModRM', 'reg', '%Vx', 'Vx', ), 288 290 'Vx_WO': ( 'IDX_UseModRM', 'reg', '%Vx', 'Vx', ), 289 291 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r67014 r67015 4508 4508 * @optest 64-bit / op1=1 op2=2 -> op1=2 4509 4509 * @optest 64-bit / op1=0 op2=-42 -> op1=-42 4510 * @oponly4511 4510 */ 4512 4511 IEMOP_MNEMONIC2(MR, MOVQ, movq, Eq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OZ_PFX); … … 4559 4558 * @optest op1=1 op2=2 -> op1=2 4560 4559 * @optest op1=0 op2=-42 -> op1=-42 4561 * @oponly4562 4560 */ 4563 4561 IEMOP_MNEMONIC2(MR, MOVD, movd, Ed_WO, Vd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OZ_PFX); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r67012 r67015 2749 2749 * @optest 64-bit / op1=1 op2=2 -> op1=2 2750 2750 * @optest 64-bit / op1=0 op2=-42 -> op1=-42 2751 * @oponly2752 2751 */ 2753 2752 IEMOP_MNEMONIC2(VEX_MR, VMOVQ, vmovq, Eq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OZ_PFX); … … 2800 2799 * @optest op1=1 op2=2 -> op1=2 2801 2800 * @optest op1=0 op2=-42 -> op1=-42 2802 * @oponly2803 2801 */ 2804 2802 IEMOP_MNEMONIC2(VEX_MR, VMOVD, vmovd, Ed_WO, Vd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OZ_PFX); … … 2848 2846 /* Opcode VEX.0F 0x7f - invalid */ 2849 2847 2850 /** Opcode VEX.66.0F 0x7f - vmovdqa Wx,Vx */ 2851 FNIEMOP_STUB(iemOp_vmovdqa_Wx_Vx); 2852 //FNIEMOP_DEF(iemOp_vmovdqa_Wx_Vx) 2853 //{ 2854 // IEMOP_MNEMONIC(vmovdqa_Wdq_Vdq, "vmovdqa Wx,Vx"); 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_DECODING_NO_LOCK_PREFIX(); 2862 // IEM_MC_BEGIN(0, 0); 2863 // IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2864 // IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 2865 // IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 2866 // ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 2867 // IEM_MC_ADVANCE_RIP(); 2868 // IEM_MC_END(); 2869 // } 2870 // else 2871 // { 2872 // /* 2873 // * Register, memory. 2874 // */ 2875 // IEM_MC_BEGIN(0, 2); 2876 // IEM_MC_LOCAL(RTUINT128U, u128Tmp); 2877 // IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 2878 // 2879 // IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 2880 // IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2881 // IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2882 // IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 2883 // 2884 // IEM_MC_FETCH_XREG_U128(u128Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 2885 // IEM_MC_STORE_MEM_U128_ALIGN_SSE(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u128Tmp); 2886 // 2887 // IEM_MC_ADVANCE_RIP(); 2888 // IEM_MC_END(); 2889 // } 2890 // return VINF_SUCCESS; 2891 //} 2848 /** 2849 * @opcode 0x7f 2850 * @oppfx 0x66 2851 * @opcpuid avx 2852 * @opgroup og_avx_simdint_datamove 2853 * @opxcpttype 1 2854 * @optest op1=1 op2=2 -> op1=2 2855 * @optest op1=0 op2=-42 -> op1=-42 2856 * @oponly 2857 */ 2858 FNIEMOP_DEF(iemOp_vmovdqa_Wx_Vx) 2859 { 2860 IEMOP_MNEMONIC2(VEX_MR, VMOVDQA, vmovdqa, Wx_WO, Vx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 2861 Assert(pVCpu->iem.s.uVexLength <= 1); 2862 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2863 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 2864 { 2865 /* 2866 * Register, register. 2867 */ 2868 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 2869 IEM_MC_BEGIN(0, 0); 2870 2871 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2872 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 2873 if (pVCpu->iem.s.uVexLength == 0) 2874 IEM_MC_COPY_YREG_U128_ZX_VLMAX((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 2875 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 2876 else 2877 IEM_MC_COPY_YREG_U256_ZX_VLMAX((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 2878 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 2879 IEM_MC_ADVANCE_RIP(); 2880 IEM_MC_END(); 2881 } 2882 else if (pVCpu->iem.s.uVexLength == 0) 2883 { 2884 /* 2885 * Register, memory128. 2886 */ 2887 IEM_MC_BEGIN(0, 2); 2888 IEM_MC_LOCAL(RTUINT128U, u128Tmp); 2889 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 2890 2891 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 2892 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 2893 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2894 IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ(); 2895 2896 IEM_MC_FETCH_YREG_U128(u128Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 2897 IEM_MC_STORE_MEM_U128_ALIGN_SSE(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u128Tmp); 2898 2899 IEM_MC_ADVANCE_RIP(); 2900 IEM_MC_END(); 2901 } 2902 else 2903 { 2904 /* 2905 * Register, memory256. 2906 */ 2907 IEM_MC_BEGIN(0, 2); 2908 IEM_MC_LOCAL(RTUINT256U, u256Tmp); 2909 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 2910 2911 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 2912 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 2913 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2914 IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ(); 2915 2916 IEM_MC_FETCH_YREG_U256(u256Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 2917 IEM_MC_STORE_MEM_U256_ALIGN_AVX(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u256Tmp); 2918 2919 IEM_MC_ADVANCE_RIP(); 2920 IEM_MC_END(); 2921 } 2922 return VINF_SUCCESS; 2923 } 2892 2924 2893 2925 /** Opcode VEX.F3.0F 0x7f - vmovdqu Wx,Vx */ -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c
r67014 r67015 4758 4758 break; 4759 4759 4760 case BS3CG1ENC_VEX_MODRM_Wx_WO_Vx: 4761 pThis->pfnEncoder = Bs3Cg1EncodeNext_VEX_MODRM_WsomethingWO_Vsomething_Wip_OR_ViceVersa; 4762 pThis->iRmOp = 0; 4763 pThis->iRegOp = 1; 4764 pThis->aOperands[0].cbOp = 16; 4765 pThis->aOperands[1].cbOp = 16; 4766 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX_ZX_VLMAX; 4767 pThis->aOperands[0].enmLocationReg = BS3CG1OPLOC_CTX_ZX_VLMAX; 4768 pThis->aOperands[0].enmLocationMem = BS3CG1OPLOC_MEM_WO; 4769 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX; 4770 pThis->aOperands[0].idxFieldBase = BS3CG1DST_XMM0; 4771 pThis->aOperands[1].idxFieldBase = BS3CG1DST_XMM0; 4772 break; 4773 4760 4774 4761 4775 /* Unused or invalid instructions mostly. */ -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h
r67014 r67015 64 64 BS3CG1OP_WqZxReg_WO, 65 65 BS3CG1OP_Wx, 66 BS3CG1OP_Wx_WO, 66 67 67 68 BS3CG1OP_Gb, … … 102 103 BS3CG1OP_VqHi_WO, 103 104 BS3CG1OP_VqZx_WO, 105 BS3CG1OP_Vx, 104 106 BS3CG1OP_Vx_WO, 105 107 … … 199 201 BS3CG1ENC_VEX_MODRM_Wps_WO_Vps, 200 202 BS3CG1ENC_VEX_MODRM_Wpd_WO_Vpd, 203 BS3CG1ENC_VEX_MODRM_Wx_WO_Vx, 201 204 202 205 BS3CG1ENC_FIXED,
Note:
See TracChangeset
for help on using the changeset viewer.