Changeset 66978 in vbox for trunk/src/VBox
- Timestamp:
- May 19, 2017 12:33:23 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r66977 r66978 1343 1343 } 1344 1344 1345 /** Opcode VEX.66.0F 0x29 - vmovapd Wpd,Vpd */ 1346 FNIEMOP_STUB(iemOp_vmovapd_Wpd_Vpd); 1347 //FNIEMOP_DEF(iemOp_vmovapd_Wpd_Vpd) 1348 //{ 1349 // IEMOP_MNEMONIC(vmovapd_Wpd_Vpd, "movapd Wpd,Vpd"); 1350 // uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1351 // if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1352 // { 1353 // /* 1354 // * Register, register. 1355 // */ 1356 // IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1357 // IEM_MC_BEGIN(0, 0); 1358 // IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1359 // IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1360 // IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1361 // ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1362 // IEM_MC_ADVANCE_RIP(); 1363 // IEM_MC_END(); 1364 // } 1365 // else 1366 // { 1367 // /* 1368 // * Memory, register. 1369 // */ 1370 // IEM_MC_BEGIN(0, 2); 1371 // IEM_MC_LOCAL(RTUINT128U, uSrc); /** @todo optimize this one day... */ 1372 // IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1373 // 1374 // IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1375 // IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1376 // IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1377 // IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 1378 // 1379 // IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1380 // IEM_MC_STORE_MEM_U128_ALIGN_SSE(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 1381 // 1382 // IEM_MC_ADVANCE_RIP(); 1383 // IEM_MC_END(); 1384 // } 1385 // return VINF_SUCCESS; 1386 //} 1387 1388 /* Opcode VEX.F3.0F 0x29 - invalid */ 1389 /* Opcode VEX.F2.0F 0x29 - invalid */ 1345 /** 1346 * @opcode 0x29 1347 * @oppfx 66 1348 * @opcpuid avx 1349 * @opgroup og_avx_pcksclr_datamove 1350 * @opxcpttype 1 1351 * @optest op1=1 op2=2 -> op1=2 1352 * @optest op1=0 op2=-42 -> op1=-42 1353 * @note Almost identical to vmovaps 1354 */ 1355 FNIEMOP_DEF(iemOp_vmovapd_Wpd_Vpd) 1356 { 1357 IEMOP_MNEMONIC2(VEX_MR, VMOVAPD, vmovapd, Wpd_WO, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 1358 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1359 Assert(pVCpu->iem.s.uVexLength <= 1); 1360 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1361 { 1362 /* 1363 * Register, register. 1364 */ 1365 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 1366 IEM_MC_BEGIN(1, 0); 1367 1368 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1369 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 1370 if (pVCpu->iem.s.uVexLength == 0) 1371 IEM_MC_COPY_YREG_U128_ZX_VLMAX((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1372 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1373 else 1374 IEM_MC_COPY_YREG_U256_ZX_VLMAX((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1375 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1376 IEM_MC_ADVANCE_RIP(); 1377 IEM_MC_END(); 1378 } 1379 else 1380 { 1381 /* 1382 * Register, memory. 1383 */ 1384 if (pVCpu->iem.s.uVexLength == 0) 1385 { 1386 IEM_MC_BEGIN(0, 2); 1387 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1388 IEM_MC_LOCAL(RTUINT128U, uSrc); 1389 1390 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1391 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 1392 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1393 IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ(); 1394 1395 IEM_MC_FETCH_YREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1396 IEM_MC_STORE_MEM_U128_ALIGN_SSE(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 1397 1398 IEM_MC_ADVANCE_RIP(); 1399 IEM_MC_END(); 1400 } 1401 else 1402 { 1403 IEM_MC_BEGIN(0, 2); 1404 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1405 IEM_MC_LOCAL(RTUINT256U, uSrc); 1406 1407 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1408 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 1409 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1410 IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ(); 1411 1412 IEM_MC_FETCH_YREG_U256(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1413 IEM_MC_STORE_MEM_U256_ALIGN_AVX(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 1414 1415 IEM_MC_ADVANCE_RIP(); 1416 IEM_MC_END(); 1417 } 1418 } 1419 return VINF_SUCCESS; 1420 } 1421 1422 1423 /** 1424 * @opmnemonic udvexf30f29 1425 * @opcode 0x29 1426 * @oppfx 0xf3 1427 * @opunused vex.modrm 1428 * @opcpuid avx 1429 * @optest -> 1430 * @opdone 1431 */ 1432 1433 /** 1434 * @opmnemonic udvexf20f29 1435 * @opcode 0x29 1436 * @oppfx 0xf2 1437 * @opunused vex.modrm 1438 * @opcpuid avx 1439 * @optest -> 1440 * @opdone 1441 */ 1390 1442 1391 1443
Note:
See TracChangeset
for help on using the changeset viewer.