Changeset 66976 in vbox for trunk/src/VBox/VMM
- Timestamp:
- May 19, 2017 12:23:32 PM (8 years ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r66966 r66976 384 384 'ModR/M': [ 'BS3CG1ENC_MODRM', ], ##< ModR/M 385 385 'VEX.ModR/M': [ 'BS3CG1ENC_VEX_MODRM', ], ##< VEX...ModR/M 386 'fixed': [ 'BS3CG1ENC_FIXED', ], ##< Fixed encoding (address, registers, etc). 386 'fixed': [ 'BS3CG1ENC_FIXED', ], ##< Fixed encoding (address, registers, unused, etc). 387 'VEX.fixed': [ 'BS3CG1ENC_VEX_FIXED', ], ##< VEX + fixed encoding (address, registers, unused, etc). 387 388 'prefix': [ None, ], ##< Prefix 388 389 }; … … 391 392 g_kdInvalidStyles = { 392 393 'immediate': [], ##< CPU stops decoding immediately after the opcode. 394 'vex.modrm': [], ##< VEX+ModR/M, everyone. 393 395 'intel-modrm': [], ##< Intel decodes ModR/M. 394 396 'intel-modrm-imm8': [], ##< Intel decodes ModR/M and an 8-byte immediate. … … 1778 1780 oInstr.sEncoding = 'VEX.ModR/M' if oInstr.onlyInVexMaps() else 'ModR/M'; 1779 1781 else: 1780 oInstr.sEncoding = ' fixed';1782 oInstr.sEncoding = 'VEX.fixed' if oInstr.onlyInVexMaps() else 'fixed'; 1781 1783 elif oInstr.aoOperands[0].usesModRM(): 1782 1784 if (len(oInstr.aoOperands) >= 2 and oInstr.aoOperands[1].sWhere == 'vvvv') \ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r66972 r66976 1099 1099 * @optest op1=1 op2=2 -> op1=2 1100 1100 * @optest op1=0 op2=-42 -> op1=-42 1101 * @note Almost identical to vmovapd. 1101 1102 */ 1102 1103 FNIEMOP_DEF(iemOp_vmovaps_Vps_Wps) … … 1168 1169 1169 1170 1170 1171 /** Opcode VEX.66.0F 0x28 - vmovapd Vpd, Wpd */ 1172 FNIEMOP_STUB(iemOp_vmovapd_Vpd_Wpd); 1173 //FNIEMOP_DEF(iemOp_vmovapd_Vpd_Wpd) 1174 //{ 1175 // IEMOP_MNEMONIC(vmovapd_Wpd_Wpd, "vmovapd Wpd,Wpd"); 1176 // uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1177 // if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1178 // { 1179 // /* 1180 // * Register, register. 1181 // */ 1182 // IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1183 // IEM_MC_BEGIN(0, 0); 1184 // IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1185 // IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1186 // IEM_MC_COPY_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 1187 // (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1188 // IEM_MC_ADVANCE_RIP(); 1189 // IEM_MC_END(); 1190 // } 1191 // else 1192 // { 1193 // /* 1194 // * Register, memory. 1195 // */ 1196 // IEM_MC_BEGIN(0, 2); 1197 // IEM_MC_LOCAL(RTUINT128U, uSrc); /** @todo optimize this one day... */ 1198 // IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1199 // 1200 // IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1201 // IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1202 // IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1203 // IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1204 // 1205 // IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1206 // IEM_MC_STORE_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 1207 // 1208 // IEM_MC_ADVANCE_RIP(); 1209 // IEM_MC_END(); 1210 // } 1211 // return VINF_SUCCESS; 1212 //} 1213 1214 /* Opcode VEX.F3.0F 0x28 - invalid */ 1215 /* Opcode VEX.F2.0F 0x28 - invalid */ 1171 /** 1172 * @opcode 0x28 1173 * @oppfx 66 1174 * @opcpuid avx 1175 * @opgroup og_avx_pcksclr_datamove 1176 * @opxcpttype 1 1177 * @optest op1=1 op2=2 -> op1=2 1178 * @optest op1=0 op2=-42 -> op1=-42 1179 * @note Almost identical to vmovaps 1180 */ 1181 FNIEMOP_DEF(iemOp_vmovapd_Vpd_Wpd) 1182 { 1183 IEMOP_MNEMONIC2(VEX_RM, VMOVAPD, vmovapd, Vpd_WO, Wpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 1184 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1185 Assert(pVCpu->iem.s.uVexLength <= 1); 1186 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1187 { 1188 /* 1189 * Register, register. 1190 */ 1191 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 1192 IEM_MC_BEGIN(1, 0); 1193 1194 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1195 IEM_MC_PREPARE_AVX_USAGE(); 1196 if (pVCpu->iem.s.uVexLength == 0) 1197 IEM_MC_COPY_YREG_U128_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 1198 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1199 else 1200 IEM_MC_COPY_YREG_U256_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 1201 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1202 IEM_MC_ADVANCE_RIP(); 1203 IEM_MC_END(); 1204 } 1205 else 1206 { 1207 /* 1208 * Register, memory. 1209 */ 1210 if (pVCpu->iem.s.uVexLength == 0) 1211 { 1212 IEM_MC_BEGIN(0, 2); 1213 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1214 IEM_MC_LOCAL(RTUINT128U, uSrc); 1215 1216 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1217 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 1218 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1219 IEM_MC_PREPARE_AVX_USAGE(); 1220 1221 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1222 IEM_MC_STORE_YREG_U128_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 1223 1224 IEM_MC_ADVANCE_RIP(); 1225 IEM_MC_END(); 1226 } 1227 else 1228 { 1229 IEM_MC_BEGIN(0, 2); 1230 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1231 IEM_MC_LOCAL(RTUINT256U, uSrc); 1232 1233 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1234 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 1235 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1236 IEM_MC_PREPARE_AVX_USAGE(); 1237 1238 IEM_MC_FETCH_MEM_U256_ALIGN_AVX(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1239 IEM_MC_STORE_YREG_U256_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 1240 1241 IEM_MC_ADVANCE_RIP(); 1242 IEM_MC_END(); 1243 } 1244 } 1245 return VINF_SUCCESS; 1246 } 1247 1248 /** 1249 * @opmnemonic udvexf30f28 1250 * @opcode 0x28 1251 * @oppfx 0xf3 1252 * @opunused vex.modrm 1253 * @opcpuid avx 1254 * @optest -> 1255 * @opdone 1256 */ 1257 1258 /** 1259 * @opmnemonic udvexf20f28 1260 * @opcode 0x28 1261 * @oppfx 0xf2 1262 * @opunused vex.modrm 1263 * @opcpuid avx 1264 * @optest -> 1265 * @opdone 1266 */ 1216 1267 1217 1268 /** Opcode VEX.0F 0x29 - vmovaps Wps, Vps */
Note:
See TracChangeset
for help on using the changeset viewer.