VirtualBox

Changeset 53246 in vbox for trunk/src


Ignore:
Timestamp:
Nov 5, 2014 11:16:48 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
96804
Message:

IEM: Added salc (set AL to CF). Started making sense of the whole SIMD/AVX(VEX) thing.

File:
1 edited

Legend:

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

    r53202 r53246  
    1197011970
    1197111971/** Opcode 0xc4. */
    11972 FNIEMOP_DEF(iemOp_les_Gv_Mp)
     11972FNIEMOP_DEF(iemOp_les_Gv_Mp_vex2)
    1197311973{
    1197411974    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     
    1199211992
    1199311993/** Opcode 0xc5. */
    11994 FNIEMOP_DEF(iemOp_lds_Gv_Mp)
    11995 {
     11994FNIEMOP_DEF(iemOp_lds_Gv_Mp_vex3)
     11995{
     11996    /* The LDS instruction is invalid 64-bit mode. In legacy and
     11997       compatability mode it is invalid with MOD=3.
     11998       The use as a VEX prefix is made possible by assigning the inverted
     11999       REX.R and REX.X to the two MOD bits, since the REX bits are ignored
     12000       outside of 64-bit mode.  VEX is not available in real or v86 mode. */
    1199612001    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    11997     if (   pIemCpu->enmCpuMode == IEMMODE_64BIT
    11998         || (bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
    11999     {
    12000         IEMOP_MNEMONIC("3-byte-vex");
    12001         /* The LDS instruction is invalid 64-bit mode. In legacy and
    12002            compatability mode it is invalid with MOD=3.
    12003            The use as a VEX prefix is made possible by assigning the inverted
    12004            REX.R and REX.X to the two MOD bits, since the REX bits are ignored
    12005            outside of 64-bit mode. */
    12006         /** @todo VEX: Just use new tables for it. */
    12007         return IEMOP_RAISE_INVALID_OPCODE();
    12008     }
    12009     IEMOP_MNEMONIC("lds Gv,Mp");
    12010     return FNIEMOP_CALL_2(iemOpCommonLoadSRegAndGreg, X86_SREG_DS, bRm);
     12002    if (pIemCpu->enmCpuMode != IEMMODE_64BIT)
     12003    {
     12004        if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
     12005        {
     12006            IEMOP_MNEMONIC("lds Gv,Mp");
     12007            return FNIEMOP_CALL_2(iemOpCommonLoadSRegAndGreg, X86_SREG_DS, bRm);
     12008        }
     12009        IEMOP_HLP_NO_REAL_OR_V86_MODE();
     12010    }
     12011
     12012    IEMOP_MNEMONIC("3-byte-vex");
     12013    /** @todo Test when exctly the VEX conformance checks kick in during
     12014     * instruction decoding and fetching (using \#PF). */
     12015    uint8_t bVex1;   IEM_OPCODE_GET_NEXT_U8(&bVex1);
     12016    uint8_t bVex2;   IEM_OPCODE_GET_NEXT_U8(&bVex2);
     12017    uint8_t bOpcode; IEM_OPCODE_GET_NEXT_U8(&bOpcode);
     12018#if 0 /* will make sense of this next week... */
     12019    if (   !(pIemCpu->fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPZ | IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REX))
     12020        &&
     12021        )
     12022    {
     12023
     12024    }
     12025#endif
     12026
     12027    /** @todo VEX: Just use new tables for it. */
     12028    return IEMOP_RAISE_INVALID_OPCODE();
    1201112029}
    1201212030
     
    1261612634    IEMOP_HLP_NO_64BIT();
    1261712635    return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_aad, bImm);
     12636}
     12637
     12638
     12639/** Opcode 0xd6. */
     12640FNIEMOP_DEF(iemOp_salc)
     12641{
     12642    IEMOP_MNEMONIC("salc");
     12643    uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     12644    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     12645    IEMOP_HLP_NO_64BIT();
     12646
     12647    IEM_MC_BEGIN(0, 0);
     12648    IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) {
     12649        IEM_MC_STORE_GREG_U8(X86_GREG_xAX, 0xff);
     12650    } IEM_MC_ELSE() {
     12651        IEM_MC_STORE_GREG_U8(X86_GREG_xAX, 0x00);
     12652    } IEM_MC_ENDIF();
     12653    IEM_MC_ADVANCE_RIP();
     12654    IEM_MC_END();
     12655    return VINF_SUCCESS;
    1261812656}
    1261912657
     
    1730617344    /* 0xbc */  iemOp_eSP_Iv,           iemOp_eBP_Iv,           iemOp_eSI_Iv,           iemOp_eDI_Iv,
    1730717345    /* 0xc0 */  iemOp_Grp2_Eb_Ib,       iemOp_Grp2_Ev_Ib,       iemOp_retn_Iw,          iemOp_retn,
    17308     /* 0xc4 */  iemOp_les_Gv_Mp,        iemOp_lds_Gv_Mp,        iemOp_Grp11_Eb_Ib,      iemOp_Grp11_Ev_Iz,
     17346    /* 0xc4 */  iemOp_les_Gv_Mp_vex2,   iemOp_lds_Gv_Mp_vex3,   iemOp_Grp11_Eb_Ib,      iemOp_Grp11_Ev_Iz,
    1730917347    /* 0xc8 */  iemOp_enter_Iw_Ib,      iemOp_leave,            iemOp_retf_Iw,          iemOp_retf,
    1731017348    /* 0xcc */  iemOp_int_3,            iemOp_int_Ib,           iemOp_into,             iemOp_iret,
    1731117349    /* 0xd0 */  iemOp_Grp2_Eb_1,        iemOp_Grp2_Ev_1,        iemOp_Grp2_Eb_CL,       iemOp_Grp2_Ev_CL,
    17312     /* 0xd4 */  iemOp_aam_Ib,           iemOp_aad_Ib,           iemOp_Invalid,          iemOp_xlat,
     17350    /* 0xd4 */  iemOp_aam_Ib,           iemOp_aad_Ib,           iemOp_salc,             iemOp_xlat,
    1731317351    /* 0xd8 */  iemOp_EscF0,            iemOp_EscF1,            iemOp_EscF2,            iemOp_EscF3,
    1731417352    /* 0xdc */  iemOp_EscF4,            iemOp_EscF5,            iemOp_EscF6,            iemOp_EscF7,
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