Changeset 66309 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Mar 28, 2017 3:35:12 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 114238
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r66306 r66309 10759 10759 #define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg) \ 10760 10760 do { (a_u32Value) = IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState)->x87.aXMM[(a_iXReg)].au32[0]; } while (0) 10761 #define IEM_MC_FETCH_XREG_HI_U64(a_u64Value, a_iXReg) \ 10762 do { (a_u64Value) = IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState)->x87.aXMM[(a_iXReg)].au64[1]; } while (0) 10761 10763 #define IEM_MC_STORE_XREG_U128(a_iXReg, a_u128Value) \ 10762 10764 do { IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState)->x87.aXMM[(a_iXReg)].xmm = (a_u128Value); } while (0) -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r66306 r66309 166 166 'Wpd': ( 'IDX_UseModRM', 'rm', '%Wpd', 'Wpd', ), 167 167 168 # ModR/M.rm - register only. 169 'Uq': ( 'IDX_UseModRM', 'rm', '%Uq', 'Uq', ), 170 'UqHi': ( 'IDX_UseModRM', 'rm', '%Uq', 'UqHi', ), 171 168 172 # ModR/M.rm - memory only. 169 173 'Ma': ( 'IDX_UseModRM', 'rm', '%Ma', 'Ma', ), ##< Only used by BOUND. 174 'Mq': ( 'IDX_UseModRM', 'rm', '%Mq', 'Mq', ), 170 175 171 176 # ModR/M.reg … … 177 182 'Vps': ( 'IDX_UseModRM', 'reg', '%Vps', 'Vps', ), 178 183 'Vpd': ( 'IDX_UseModRM', 'reg', '%Vpd', 'Vpd', ), 184 'Vq': ( 'IDX_UseModRM', 'reg', '%Vq', 'Vq', ), 179 185 180 186 # Immediate values. -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r66306 r66309 1084 1084 * @optest op1=1 op2=2 -> op1=2 1085 1085 * @optest op1=0 op2=-42 -> op1=-42 1086 * @oponlytest1087 1086 */ 1088 1087 FNIEMOP_DEF(iemOp_vmovups_Wps_Vps) … … 1136 1135 * @optest op1=1 op2=2 -> op1=2 1137 1136 * @optest op1=0 op2=-42 -> op1=-42 1138 * @oponlytest1139 1137 */ 1140 1138 FNIEMOP_DEF(iemOp_vmovupd_Wpd_Vpd) … … 1188 1186 * @optest op1=1 op2=2 -> op1=2 1189 1187 * @optest op1=0 op2=-22 -> op1=-22 1190 * @oponlytest1191 1188 */ 1192 1189 FNIEMOP_DEF(iemOp_vmovss_Wss_Hx_Vss) … … 1243 1240 * @optest op1=1 op2=2 -> op1=2 1244 1241 * @optest op1=0 op2=-42 -> op1=-42 1245 * @oponlytest1246 1242 */ 1247 1243 FNIEMOP_DEF(iemOp_vmovsd_Wsd_Hx_Vsd) … … 1290 1286 1291 1287 1292 /** Opcode 0x0f 0x12. */ 1293 FNIEMOP_STUB(iemOp_vmovlps_Vq_Hq_Mq__vmovhlps); //NEXT 1288 FNIEMOP_DEF(iemOp_vmovlps_Vq_Hq_Mq__vmovhlps) 1289 { 1290 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1291 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1292 { 1293 /** 1294 * @opcode 0x12 1295 * @oppfx none 1296 * @opcpuid sse 1297 * @opgroup og_sse_simdfp_datamove 1298 * @opxcpttype 5 1299 * @optest op1=1 op2=2 -> op1=2 1300 * @optest op1=0 op2=-42 -> op1=-42 1301 * @oponlytest 1302 */ 1303 IEMOP_MNEMONIC2(RM, MOVHLPS, movhlps, Vq, UqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 1304 1305 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1306 IEM_MC_BEGIN(0, 1); 1307 IEM_MC_LOCAL(uint64_t, uSrc); 1308 1309 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1310 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1311 IEM_MC_FETCH_XREG_HI_U64(uSrc, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1312 IEM_MC_STORE_XREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 1313 1314 IEM_MC_ADVANCE_RIP(); 1315 IEM_MC_END(); 1316 } 1317 else 1318 { 1319 /** 1320 * @opdone 1321 * @opcode 0x12 1322 * @oppfx none 1323 * @opcpuid sse 1324 * @opgroup og_sse_simdfp_datamove 1325 * @opxcpttype 5 1326 * @optest op1=1 op2=2 -> op1=2 1327 * @optest op1=0 op2=-42 -> op1=-42 1328 * @opfunction iemOp_vmovlps_Vq_Hq_Mq__vmovhlps 1329 * @oponlytest 1330 */ 1331 IEMOP_MNEMONIC2(RM, MOVLPS, movlps, Vq, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 1332 1333 IEM_MC_BEGIN(0, 2); 1334 IEM_MC_LOCAL(uint64_t, uSrc); 1335 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1336 1337 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1338 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1339 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1340 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1341 1342 IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1343 IEM_MC_STORE_XREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 1344 1345 IEM_MC_ADVANCE_RIP(); 1346 IEM_MC_END(); 1347 } 1348 return VINF_SUCCESS; 1349 } 1294 1350 1295 1351 /** Opcode 0x66 0x0f 0x12. */ -
trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp
r66306 r66309 498 498 #define IEM_MC_FETCH_XREG_U64(a_u64Value, a_iXReg) do { (a_u64Value) = 0; CHK_TYPE(uint64_t, a_u64Value); (void)fSseRead; } while (0) 499 499 #define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg) do { (a_u32Value) = 0; CHK_TYPE(uint32_t, a_u32Value); (void)fSseRead; } while (0) 500 #define IEM_MC_FETCH_XREG_HI_U64(a_u64Value, a_iXReg) do { (a_u64Value) = 0; CHK_TYPE(uint64_t, a_u64Value); (void)fSseRead; } while (0) 500 501 #define IEM_MC_STORE_XREG_U128(a_iXReg, a_u128Value) do { CHK_TYPE(uint128_t, a_u128Value); (void)fSseWrite; } while (0) 501 502 #define IEM_MC_STORE_XREG_U64(a_iXReg, a_u64Value) do { CHK_TYPE(uint64_t, a_u64Value); (void)fSseWrite; } while (0)
Note:
See TracChangeset
for help on using the changeset viewer.