VirtualBox

Ignore:
Timestamp:
May 4, 2017 11:48:37 AM (8 years ago)
Author:
vboxsync
Message:

IEM: Implemented movlhps Vdq,Uq and movhps Vdq,Mq (0f 16).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r66748 r66785  
    18111811 */
    18121812
    1813 /** Opcode      0x0f 0x16 - movhpsv1 Vdq, Mq movlhps Vdq, Uq   */
    1814 FNIEMOP_STUB(iemOp_movhpsv1_Vdq_Mq__movlhps_Vdq_Uq);  //NEXT
     1813FNIEMOP_DEF(iemOp_movhps_Vdq_Mq__movlhps_Vdq_Uq)
     1814{
     1815    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     1816    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     1817    {
     1818        /**
     1819         * @opcode      0x16
     1820         * @opcodesub   11 mr/reg
     1821         * @oppfx       none
     1822         * @opcpuid     sse
     1823         * @opgroup     og_sse_simdfp_datamove
     1824         * @opxcpttype  5
     1825         * @optest      op1=1 op2=2 -> op1=2
     1826         * @optest      op1=0 op2=-42 -> op1=-42
     1827         */
     1828        IEMOP_MNEMONIC2(RM_REG, MOVLHPS, movlhps, VqHi, Uq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1829
     1830        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1831        IEM_MC_BEGIN(0, 1);
     1832        IEM_MC_LOCAL(uint64_t,                  uSrc);
     1833
     1834        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     1835        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     1836        IEM_MC_FETCH_XREG_U64(uSrc, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB);
     1837        IEM_MC_STORE_XREG_HI_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc);
     1838
     1839        IEM_MC_ADVANCE_RIP();
     1840        IEM_MC_END();
     1841    }
     1842    else
     1843    {
     1844        /**
     1845         * @opdone
     1846         * @opcode      0x16
     1847         * @opcodesub   !11 mr/reg
     1848         * @oppfx       none
     1849         * @opcpuid     sse
     1850         * @opgroup     og_sse_simdfp_datamove
     1851         * @opxcpttype  5
     1852         * @optest      op1=1 op2=2 -> op1=2
     1853         * @optest      op1=0 op2=-42 -> op1=-42
     1854         * @opfunction  iemOp_movhps_Vdq_Mq__movlhps_Vdq_Uq
     1855         */
     1856        IEMOP_MNEMONIC2(RM_MEM, MOVHPS, movhps, VqHi, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1857
     1858        IEM_MC_BEGIN(0, 2);
     1859        IEM_MC_LOCAL(uint64_t,                  uSrc);
     1860        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     1861
     1862        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1863        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1864        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     1865        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     1866
     1867        IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     1868        IEM_MC_STORE_XREG_HI_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc);
     1869
     1870        IEM_MC_ADVANCE_RIP();
     1871        IEM_MC_END();
     1872    }
     1873    return VINF_SUCCESS;
     1874}
     1875
    18151876/** Opcode 0x66 0x0f 0x16 - movhpdv1 Vdq, Mq   */
    1816 FNIEMOP_STUB(iemOp_movhpdv1_Vdq_Mq);  //NEXT
     1877FNIEMOP_STUB(iemOp_movhpd_Vdq_Mq);  //NEXT
    18171878/** Opcode 0xf3 0x0f 0x16 - movshdup Vx, Wx   */
    18181879FNIEMOP_STUB(iemOp_movshdup_Vx_Wx); //NEXT
     
    18301891
    18311892/** Opcode      0x0f 0x17 - movhpsv1 Mq, Vq   */
    1832 FNIEMOP_STUB(iemOp_movhpsv1_Mq_Vq);  //NEXT
     1893FNIEMOP_STUB(iemOp_movhps_Mq_Vq);  //NEXT
    18331894/** Opcode 0x66 0x0f 0x17 - movhpdv1 Mq, Vq   */
    1834 FNIEMOP_STUB(iemOp_movhpdv1_Mq_Vq);  //NEXT
     1895FNIEMOP_STUB(iemOp_movhpd_Mq_Vq);  //NEXT
    18351896
    18361897/**
     
    85588619    /* 0x0f */  IEMOP_X4(iemOp_3Dnow),
    85598620
    8560     /* 0x10 */  iemOp_movups_Vps_Wps,       iemOp_movupd_Vpd_Wpd,      iemOp_movss_Vss_Wss,        iemOp_movsd_Vsd_Wsd,
    8561     /* 0x11 */  iemOp_movups_Wps_Vps,       iemOp_movupd_Wpd_Vpd,      iemOp_movss_Wss_Vss,        iemOp_movsd_Wsd_Vsd,
    8562     /* 0x12 */  iemOp_movlps_Vq_Mq__movhlps, iemOp_movlpd_Vq_Mq,       iemOp_movsldup_Vdq_Wdq,     iemOp_movddup_Vdq_Wdq,
    8563     /* 0x13 */  iemOp_movlps_Mq_Vq,         iemOp_movlpd_Mq_Vq,        iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    8564     /* 0x14 */  iemOp_unpcklps_Vx_Wx,       iemOp_unpcklpd_Vx_Wx,      iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    8565     /* 0x15 */  iemOp_unpckhps_Vx_Wx,       iemOp_unpckhpd_Vx_Wx,      iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    8566     /* 0x16 */  iemOp_movhpsv1_Vdq_Mq__movlhps_Vdq_Uq,  iemOp_movhpdv1_Vdq_Mq, iemOp_movshdup_Vx_Wx, iemOp_InvalidNeedRM,
    8567     /* 0x17 */  iemOp_movhpsv1_Mq_Vq,       iemOp_movhpdv1_Mq_Vq,      iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
     8621    /* 0x10 */  iemOp_movups_Vps_Wps,       iemOp_movupd_Vpd_Wpd,       iemOp_movss_Vss_Wss,        iemOp_movsd_Vsd_Wsd,
     8622    /* 0x11 */  iemOp_movups_Wps_Vps,       iemOp_movupd_Wpd_Vpd,       iemOp_movss_Wss_Vss,        iemOp_movsd_Wsd_Vsd,
     8623    /* 0x12 */  iemOp_movlps_Vq_Mq__movhlps, iemOp_movlpd_Vq_Mq,        iemOp_movsldup_Vdq_Wdq,     iemOp_movddup_Vdq_Wdq,
     8624    /* 0x13 */  iemOp_movlps_Mq_Vq,         iemOp_movlpd_Mq_Vq,         iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
     8625    /* 0x14 */  iemOp_unpcklps_Vx_Wx,       iemOp_unpcklpd_Vx_Wx,       iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
     8626    /* 0x15 */  iemOp_unpckhps_Vx_Wx,       iemOp_unpckhpd_Vx_Wx,       iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
     8627    /* 0x16 */  iemOp_movhps_Vdq_Mq__movlhps_Vdq_Uq, iemOp_movhpd_Vdq_Mq, iemOp_movshdup_Vx_Wx,    iemOp_InvalidNeedRM,
     8628    /* 0x17 */  iemOp_movhps_Mq_Vq,         iemOp_movhpd_Mq_Vq,         iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    85688629    /* 0x18 */  IEMOP_X4(iemOp_prefetch_Grp16),
    85698630    /* 0x19 */  IEMOP_X4(iemOp_nop_Ev),
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette