VirtualBox

Changeset 66787 in vbox


Ignore:
Timestamp:
May 4, 2017 11:55:53 AM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
115199
Message:

IEM: Implemented movhpd Vdq,Mq (66 0f 16).

File:
1 edited

Legend:

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

    r66785 r66787  
    16941694 * @opcodesub   !11 mr/reg
    16951695 * @oppfx       0x66
    1696  * @opcpuid     sse
     1696 * @opcpuid     sse2
    16971697 * @opgroup     og_sse_simdfp_datamove
    16981698 * @opxcpttype  5
     
    18741874}
    18751875
    1876 /** Opcode 0x66 0x0f 0x16 - movhpdv1 Vdq, Mq   */
    1877 FNIEMOP_STUB(iemOp_movhpd_Vdq_Mq);  //NEXT
     1876
     1877/**
     1878 * @opcode      0x16
     1879 * @opcodesub   !11 mr/reg
     1880 * @oppfx       0x66
     1881 * @opcpuid     sse2
     1882 * @opgroup     og_sse2_pcksclr_datamove
     1883 * @opxcpttype  5
     1884 * @optest      op1=1 op2=2 -> op1=2
     1885 * @optest      op1=0 op2=-42 -> op1=-42
     1886 */
     1887FNIEMOP_DEF(iemOp_movhpd_Vdq_Mq)
     1888{
     1889    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     1890    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
     1891    {
     1892        IEMOP_MNEMONIC2(RM_MEM, MOVHPD, movhpd, VqHi, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1893        IEM_MC_BEGIN(0, 2);
     1894        IEM_MC_LOCAL(uint64_t,                  uSrc);
     1895        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     1896
     1897        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1898        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     1899        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
     1900        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
     1901
     1902        IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     1903        IEM_MC_STORE_XREG_HI_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc);
     1904
     1905        IEM_MC_ADVANCE_RIP();
     1906        IEM_MC_END();
     1907        return VINF_SUCCESS;
     1908    }
     1909
     1910    /**
     1911     * @opdone
     1912     * @opmnemonic  ud660f16m3
     1913     * @opcode      0x16
     1914     * @opcodesub   11 mr/reg
     1915     * @oppfx       0x66
     1916     * @opunused    immediate
     1917     * @opcpuid     sse
     1918     * @optest      ->
     1919     */
     1920    return IEMOP_RAISE_INVALID_OPCODE();
     1921}
     1922
     1923
    18781924/** Opcode 0xf3 0x0f 0x16 - movshdup Vx, Wx   */
    18791925FNIEMOP_STUB(iemOp_movshdup_Vx_Wx); //NEXT
Note: See TracChangeset for help on using the changeset viewer.

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