Changeset 67042 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- May 23, 2017 1:44:16 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 115627
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r67040 r67042 11220 11220 return iemRaiseMathFault(pVCpu); \ 11221 11221 } while (0) 11222 #define IEM_MC_MAYBE_RAISE_AVX2_RELATED_XCPT() \ 11223 do { \ 11224 if ( (IEM_GET_CTX(pVCpu)->aXcr[0] & (XSAVE_C_YMM | XSAVE_C_SSE)) != (XSAVE_C_YMM | XSAVE_C_SSE) \ 11225 || !(IEM_GET_CTX(pVCpu)->cr4 & X86_CR4_OSXSAVE) \ 11226 || !IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fAvx2) \ 11227 return iemRaiseUndefinedOpcode(pVCpu); \ 11228 if (IEM_GET_CTX(pVCpu)->cr0 & X86_CR0_TS) \ 11229 return iemRaiseDeviceNotAvailable(pVCpu); \ 11230 } while (0) 11222 11231 #define IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT() \ 11223 11232 do { \ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r67040 r67042 259 259 'Mps_WO': ( 'IDX_UseModRM', 'rm', '%Mps', 'Mps', ), 260 260 'Mpd_WO': ( 'IDX_UseModRM', 'rm', '%Mpd', 'Mpd', ), 261 'Mx': ( 'IDX_UseModRM', 'rm', '%Mx', 'Mx', ), 261 262 'Mx_WO': ( 'IDX_UseModRM', 'rm', '%Mx', 'Mx', ), 262 263 'M_RO': ( 'IDX_UseModRM', 'rm', '%M', 'M', ), -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap2.cpp.h
r66480 r67042 134 134 /** Opcode VEX.66.0F38 0x29. */ 135 135 FNIEMOP_STUB(iemOp_vpcmpeqq_Vx_Hx_Wx); 136 136 137 /** Opcode VEX.66.0F38 0x2a. */ 137 FNIEMOP_STUB(iemOp_vmovntdqa_Vx_Hx_Mx); 138 /* 139 * @ opcode 0x2a 140 * @ opcodesub !11 mr/reg vex.l=0 141 * @ oppfx 0x66 142 * @ opcpuid avx 143 * @ opgroup og_avx_cachect 144 * @ opxcpttype 1 145 * @ optest op1=-1 op2=2 -> op1=2 146 * @ optest op1=0 op2=-42 -> op1=-42 147 */ 148 FNIEMOP_DEF(iemOp_vmovntdqa_Vx_Mx) 149 { 150 Assert(pVCpu->iem.s.uVexLength <= 1); 151 IEMOP_MNEMONIC2(VEX_RM, VMOVNTDQA, vmovntdqa, Vx_WO, Mx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 152 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 153 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 154 { 155 if (pVCpu->iem.s.uVexLength == 0) 156 { 157 /* 158 * 128-bit: Memory, register. 159 */ 160 IEM_MC_BEGIN(0, 2); 161 IEM_MC_LOCAL(RTUINT128U, uSrc); 162 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 163 164 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 165 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 166 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 167 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 168 169 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 170 IEM_MC_STORE_YREG_U128_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 171 172 IEM_MC_ADVANCE_RIP(); 173 IEM_MC_END(); 174 } 175 else 176 { 177 /* 178 * @ opdone 179 * @ opcode 0x2a 180 * @ opcodesub !11 mr/reg vex.l=1 181 * @ oppfx 0x66 182 * @ opcpuid avx2 183 * @ opgroup og_avx2_cachect 184 * @ opxcpttype 1 185 * @ optest op1=-1 op2=2 -> op1=2 186 * @ optest op1=0 op2=-42 -> op1=-42 187 */ 188 /* 189 * 256-bit: Memory, register. 190 */ 191 IEM_MC_BEGIN(0, 2); 192 IEM_MC_LOCAL(RTUINT256U, uSrc); 193 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 194 195 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 196 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 197 IEM_MC_MAYBE_RAISE_AVX2_RELATED_XCPT(); 198 IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ(); 199 200 IEM_MC_FETCH_YREG_U256(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 201 IEM_MC_STORE_MEM_U256_ALIGN_AVX(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 202 203 IEM_MC_ADVANCE_RIP(); 204 IEM_MC_END(); 205 } 206 return VINF_SUCCESS; 207 } 208 /** 209 * @opdone 210 * @opmnemonic udvex660f382areg 211 * @opcode 0x2a 212 * @opcodesub 11 mr/reg 213 * @oppfx 0x66 214 * @opunused immediate 215 * @opcpuid avx 216 * @optest -> 217 * @oponly 218 */ 219 return IEMOP_RAISE_INVALID_OPCODE(); 220 221 } 222 138 223 /** Opcode VEX.66.0F38 0x2b. */ 139 224 FNIEMOP_STUB(iemOp_vpackusdw_Vx_Hx_Wx); … … 622 707 /* 0x28 */ iemOp_InvalidNeedRM, iemOp_vpmuldq_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 623 708 /* 0x29 */ iemOp_InvalidNeedRM, iemOp_vpcmpeqq_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 624 /* 0x2a */ iemOp_InvalidNeedRM, iemOp_vmovntdqa_Vx_ Hx_Mx,iemOp_InvalidNeedRM, iemOp_InvalidNeedRM,709 /* 0x2a */ iemOp_InvalidNeedRM, iemOp_vmovntdqa_Vx_Mx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 625 710 /* 0x2b */ iemOp_InvalidNeedRM, iemOp_vpackusdw_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 626 711 /* 0x2c */ iemOp_InvalidNeedRM, iemOp_vmaskmovps_Vx_Hx_Mx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM,
Note:
See TracChangeset
for help on using the changeset viewer.