VirtualBox

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


Ignore:
Timestamp:
Jun 27, 2016 1:28:17 PM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
108327
Message:

IEM: 16-bit IP increment fix.

File:
1 edited

Legend:

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

    r61896 r61897  
    52885288    PCPUMCTX pCtx = pIemCpu->CTX_SUFF(pCtx);
    52895289
    5290     pCtx->eflags.Bits.u1RF = 0;
    5291 
    5292     /* NB: Must be kept in sync with HM (xxxAdvanceGuestRip). */
     5290#if ARCH_BITS >= 64
     5291    AssertCompile(IEMMODE_16BIT == 0 && IEMMODE_32BIT == 1 && IEMMODE_64BIT == 2);
     5292    static uint64_t const s_aRipMasks[] = { UINT64_C(0xffff), UINT64_C(0xffffffff), UINT64_MAX };
     5293    Assert(pCtx->rip <= s_aRipMasks[pIemCpu->enmCpuMode]);
     5294    pCtx->rip += cbInstr;
     5295    pCtx->rip &= s_aRipMasks[pIemCpu->enmCpuMode];
     5296#else
    52935297    switch (pIemCpu->enmCpuMode)
    52945298    {
    5295         /** @todo investigate if EIP or RIP is really incremented. */
    52965299        case IEMMODE_16BIT:
     5300            Assert(pCtx->rip <= UINT16_MAX);
     5301            pCtx->ip += cbInstr;
     5302            break;
     5303
    52975304        case IEMMODE_32BIT:
     5305            Assert(pCtx->rip <= UINT32_MAX);
    52985306            pCtx->eip += cbInstr;
    5299             Assert(pCtx->rip <= UINT32_MAX);
    53005307            break;
    53015308
     
    53035310            pCtx->rip += cbInstr;
    53045311            break;
     5312
    53055313        default: AssertFailed();
    53065314    }
     5315#endif
     5316
     5317    pCtx->eflags.Bits.u1RF = 0;
    53075318}
    53085319
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