VirtualBox

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


Ignore:
Timestamp:
Jan 26, 2017 5:17:48 PM (8 years ago)
Author:
vboxsync
Message:

iemInitDecoderAndPrefetchOpcodes: Some MSC compatible branch predicting.

File:
1 edited

Legend:

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

    r65454 r65463  
    11791179        cbToTryRead = PAGE_SIZE;
    11801180        GCPtrPC     = pCtx->rip;
    1181         if (!IEM_IS_CANONICAL(GCPtrPC))
     1181        if (IEM_IS_CANONICAL(GCPtrPC))
     1182            cbToTryRead = PAGE_SIZE - (GCPtrPC & PAGE_OFFSET_MASK);
     1183        else
    11821184            return iemRaiseGeneralProtectionFault0(pVCpu);
    1183         cbToTryRead = PAGE_SIZE - (GCPtrPC & PAGE_OFFSET_MASK);
    11841185    }
    11851186    else
     
    11871188        uint32_t GCPtrPC32 = pCtx->eip;
    11881189        AssertMsg(!(GCPtrPC32 & ~(uint32_t)UINT16_MAX) || pVCpu->iem.s.enmCpuMode == IEMMODE_32BIT, ("%04x:%RX64\n", pCtx->cs.Sel, pCtx->rip));
    1189         if (GCPtrPC32 > pCtx->cs.u32Limit)
     1190        if (GCPtrPC32 <= pCtx->cs.u32Limit)
     1191            cbToTryRead = pCtx->cs.u32Limit - GCPtrPC32 + 1;
     1192        else
    11901193            return iemRaiseSelectorBounds(pVCpu, X86_SREG_CS, IEM_ACCESS_INSTRUCTION);
    1191         cbToTryRead = pCtx->cs.u32Limit - GCPtrPC32 + 1;
    1192         if (!cbToTryRead) /* overflowed */
     1194        if (cbToTryRead) { /* likely */ }
     1195        else /* overflowed */
    11931196        {
    11941197            Assert(GCPtrPC32 == 0); Assert(pCtx->cs.u32Limit == UINT32_MAX);
     
    12151218    uint64_t    fFlags;
    12161219    int rc = PGMGstGetPage(pVCpu, GCPtrPC, &fFlags, &GCPhys);
    1217     if (RT_FAILURE(rc))
     1220    if (RT_SUCCESS(rc)) { /* probable */ }
     1221    else
    12181222    {
    12191223        Log(("iemInitDecoderAndPrefetchOpcodes: %RGv - rc=%Rrc\n", GCPtrPC, rc));
    12201224        return iemRaisePageFault(pVCpu, GCPtrPC, IEM_ACCESS_INSTRUCTION, rc);
    12211225    }
    1222     if (!(fFlags & X86_PTE_US) && pVCpu->iem.s.uCpl == 3)
     1226    if ((fFlags & X86_PTE_US) || pVCpu->iem.s.uCpl != 3) { /* likely */ }
     1227    else
    12231228    {
    12241229        Log(("iemInitDecoderAndPrefetchOpcodes: %RGv - supervisor page\n", GCPtrPC));
    12251230        return iemRaisePageFault(pVCpu, GCPtrPC, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED);
    12261231    }
    1227     if ((fFlags & X86_PTE_PAE_NX) && (pCtx->msrEFER & MSR_K6_EFER_NXE))
     1232    if (!(fFlags & X86_PTE_PAE_NX) || !(pCtx->msrEFER & MSR_K6_EFER_NXE)) { /* likely */ }
     1233    else
    12281234    {
    12291235        Log(("iemInitDecoderAndPrefetchOpcodes: %RGv - NX\n", GCPtrPC));
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