Changeset 65769 in vbox
- Timestamp:
- Feb 13, 2017 3:07:12 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 113492
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r65766 r65769 1462 1462 /* Opcode 0xf2 0x0f 0x28 - invalid */ 1463 1463 1464 /** Opcode 0x0f 0x29. */ 1465 FNIEMOP_DEF(iemOp_movaps_Wps_Vps__movapd_Wpd_Vpd) /** @todo split me */ 1466 { 1467 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP)) 1468 IEMOP_MNEMONIC(movaps_mr_r, "movaps Wps,Vps"); 1469 else 1470 IEMOP_MNEMONIC(movapd_mr_r, "movapd Wpd,Vpd"); 1464 /** Opcode 0x0f 0x29 - vmovaps Wps, Vps */ 1465 FNIEMOP_DEF(iemOp_vmovaps_Wps_Vps) 1466 { 1467 IEMOP_MNEMONIC(movaps_mr_r, "movaps Wps,Vps"); 1471 1468 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1472 1469 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1477 1474 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); 1478 1475 IEM_MC_BEGIN(0, 0); 1479 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP)) 1480 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1481 else 1482 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1476 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1483 1477 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1484 1478 IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, … … 1498 1492 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1499 1493 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); /** @todo check if this is delayed this long for REPZ/NZ */ 1500 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP)) 1501 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1502 else 1503 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1494 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1504 1495 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 1505 1496 … … 1512 1503 return VINF_SUCCESS; 1513 1504 } 1505 1506 /** Opcode 0x66 0x0f 0x29 - vmovapd Wpd,Vpd */ 1507 FNIEMOP_DEF(iemOp_vmovapd_Wpd_Vpd) 1508 { 1509 IEMOP_MNEMONIC(movapd_mr_r, "movapd Wpd,Vpd"); 1510 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1511 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1512 { 1513 /* 1514 * Register, register. 1515 */ 1516 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); 1517 IEM_MC_BEGIN(0, 0); 1518 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1519 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1520 IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1521 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1522 IEM_MC_ADVANCE_RIP(); 1523 IEM_MC_END(); 1524 } 1525 else 1526 { 1527 /* 1528 * Memory, register. 1529 */ 1530 IEM_MC_BEGIN(0, 2); 1531 IEM_MC_LOCAL(uint128_t, uSrc); /** @todo optimize this one day... */ 1532 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1533 1534 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1535 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); /** @todo check if this is delayed this long for REPZ/NZ */ 1536 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1537 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 1538 1539 IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1540 IEM_MC_STORE_MEM_U128_ALIGN_SSE(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 1541 1542 IEM_MC_ADVANCE_RIP(); 1543 IEM_MC_END(); 1544 } 1545 return VINF_SUCCESS; 1546 } 1547 1548 /* Opcode 0xf3 0x0f 0x29 - invalid */ 1549 /* Opcode 0xf2 0x0f 0x29 - invalid */ 1514 1550 1515 1551 … … 7627 7663 /* 0x27 */ iemOp_Invalid, iemOp_Invalid, iemOp_Invalid, iemOp_Invalid, 7628 7664 /* 0x28 */ iemOp_vmovaps_Vps_Wps, iemOp_vmovapd_Vpd_Wpd, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 7629 /* 0x29 */ iemOp_ movaps_Wps_Vps__movapd_Wpd_Vpd, iemOp_movaps_Wps_Vps__movapd_Wpd_Vpd, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, /** @todo split me */7665 /* 0x29 */ iemOp_vmovaps_Wps_Vps, iemOp_vmovapd_Wpd_Vpd, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 7630 7666 /* 0x2a */ iemOp_cvtpi2ps_Vps_Qpi, iemOp_cvtpi2pd_Vpd_Qpi, iemOp_vcvtsi2ss_Vss_Hss_Ey, iemOp_vcvtsi2sd_Vsd_Hsd_Ey, 7631 7667 /* 0x2b */ iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd, iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, /** @todo split me */ … … 7912 7948 /* 0x27 */ IEMOP_X4(iemOp_InvalidNeedRM), 7913 7949 /* 0x28 */ iemOp_vmovaps_Vps_Wps, iemOp_vmovapd_Vpd_Wpd, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 7914 /* 0x29 */ iemOp_ movaps_Wps_Vps__movapd_Wpd_Vpd, iemOp_movaps_Wps_Vps__movapd_Wpd_Vpd, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, /** @todo split me */7950 /* 0x29 */ iemOp_vmovaps_Wps_Vps, iemOp_vmovapd_Wpd_Vpd, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 7915 7951 /* 0x2a */ iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, iemOp_vcvtsi2ss_Vss_Hss_Ey, iemOp_vcvtsi2sd_Vsd_Hsd_Ey, 7916 7952 /* 0x2b */ iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd, iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, /** @todo split me */
Note:
See TracChangeset
for help on using the changeset viewer.