VirtualBox

Changeset 66463 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Apr 6, 2017 5:58:25 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
114448
Message:

IEM,bs3-cpu-generated-1: Made the current testcases pass on AMD.

Location:
trunk/src/VBox/VMM/VMMAll
Files:
3 edited

Legend:

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

    r66336 r66463  
    549549
    550550
     551/** Invalid with RM byte where both AMD and Intel decodes any additional
     552 *  address encoding bytes. */
     553FNIEMOPRM_DEF(iemOp_InvalidWithRMAllNeeded)
     554{
     555    IEMOP_MNEMONIC(InvalidWithRMAllNeeded, "InvalidWithRMAllNeeded");
     556#ifndef TST_IEM_CHECK_MC
     557    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
     558    {
     559        RTGCPTR      GCPtrEff;
     560        VBOXSTRICTRC rcStrict = iemOpHlpCalcRmEffAddr(pVCpu, bRm, 0, &GCPtrEff);
     561        if (rcStrict != VINF_SUCCESS)
     562            return rcStrict;
     563    }
     564#endif
     565    IEMOP_HLP_DONE_DECODING();
     566    return IEMOP_RAISE_INVALID_OPCODE();
     567}
     568
     569
    551570/** Invalid with RM byte where intel requires 8-byte immediate.
    552571 * Intel will also need SIB and displacement if bRm indicates memory. */
     
    614633
    615634
     635/** Invalid opcode where both AMD and Intel requires Mod R/M sequence. */
     636FNIEMOP_DEF(iemOp_InvalidAllNeedRM)
     637{
     638    IEMOP_MNEMONIC(InvalidAllNeedRM, "InvalidAllNeedRM");
     639    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); RT_NOREF(bRm);
     640#ifndef TST_IEM_CHECK_MC
     641    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
     642    {
     643        RTGCPTR      GCPtrEff;
     644        VBOXSTRICTRC rcStrict = iemOpHlpCalcRmEffAddr(pVCpu, bRm, 0, &GCPtrEff);
     645        if (rcStrict != VINF_SUCCESS)
     646            return rcStrict;
     647    }
     648#endif
     649    IEMOP_HLP_DONE_DECODING();
     650    return IEMOP_RAISE_INVALID_OPCODE();
     651}
     652
     653
    616654/** Invalid opcode where intel requires Mod R/M sequence and 8-byte
    617655 *  immediate. */
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h

    r66462 r66463  
    19741974        {
    19751975            Log(("evex not supported by the guest CPU!\n"));
    1976             return FNIEMOP_CALL(iemOp_InvalidNeedRM);
     1976            return FNIEMOP_CALL(iemOp_InvalidAllNeedRM);
    19771977        }
    19781978        IEM_OPCODE_GET_NEXT_U8(&bRm);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r66462 r66463  
    60286028    IEMOP_MNEMONIC1(M_MEM, CLFLUSH, clflush, MbRO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    60296029    if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fClFlush)
    6030         return IEMOP_RAISE_INVALID_OPCODE();
     6030        return FNIEMOP_CALL_1(iemOp_InvalidWithRMAllNeeded, bRm);
    60316031
    60326032    IEM_MC_BEGIN(2, 0);
     
    60536053    IEMOP_MNEMONIC1(M_MEM, CLFLUSHOPT, clflushopt, MbRO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    60546054    if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fClFlushOpt)
    6055         return IEMOP_RAISE_INVALID_OPCODE();
     6055        return FNIEMOP_CALL_1(iemOp_InvalidWithRMAllNeeded, bRm);
    60566056
    60576057    IEM_MC_BEGIN(2, 0);
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