VirtualBox

Changeset 56064 in vbox for trunk/src


Ignore:
Timestamp:
May 25, 2015 4:09:01 PM (10 years ago)
Author:
vboxsync
Message:

Committed the VBOX_WITH_FIRST_IEM_STEP code, removing the #else cases.

Location:
trunk/src/VBox/VMM
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/Makefile.kmk

    r55966 r56064  
    3333# Can be prepended to by setting it in LocalConfig.kmk
    3434VMM_COMMON_DEFS ?= VBOX_IN_VMM
    35 ifdef VBOX_WITH_FIRST_IEM_STEP
    36  VMM_COMMON_DEFS += VBOX_WITH_FIRST_IEM_STEP
     35ifdef VBOX_WITH_2ND_IEM_STEP
     36 VMM_COMMON_DEFS += VBOX_WITH_2ND_IEM_STEP
    3737endif
    3838#ifdef VBOX_WITH_IEM
  • trunk/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp

    r56063 r56064  
    22312231
    22322232
    2233 #if !defined(VBOX_WITH_FIRST_IEM_STEP) || defined(IN_RC) /* Latter for IOMRCIOPortHandler */
     2233#ifdef IN_RC /* Latter for IOMRCIOPortHandler */
    22342234/**
    22352235 * [REP*] INSB/INSW/INSD
     
    22742274    return IOMInterpretINSEx(pVM, pVCpu, pRegFrame, Port, pCpu->fPrefix, (DISCPUMODE)pCpu->uAddrMode, cb);
    22752275}
    2276 #endif /* !IEM || RC */
     2276#endif /* RC */
    22772277
    22782278
     
    24002400
    24012401
    2402 #if !defined(VBOX_WITH_FIRST_IEM_STEP) || defined(IN_RC) /* Latter for IOMRCIOPortHandler */
     2402#ifdef IN_RC /* Latter for IOMRCIOPortHandler */
    24032403/**
    24042404 * [REP*] OUTSB/OUTSW/OUTSD
     
    24452445    return IOMInterpretOUTSEx(pVM, pVCpu, pRegFrame, Port, pCpu->fPrefix, (DISCPUMODE)pCpu->uAddrMode, cb);
    24462446}
    2447 #endif /* !IEM || RC */
     2447#endif /* RC */
    24482448
    24492449#ifndef IN_RC
  • trunk/src/VBox/VMM/VMMR3/EM.cpp

    r55036 r56064  
    387387
    388388        EM_REG_COUNTER_USED(&pStats->StatIoRestarted,            "/EM/CPU%d/R3/PrivInst/IoRestarted",        "I/O instructions restarted in ring-3.");
    389 # ifdef VBOX_WITH_FIRST_IEM_STEP
    390389        EM_REG_COUNTER_USED(&pStats->StatIoIem,                  "/EM/CPU%d/R3/PrivInst/IoIem",              "I/O instructions end to IEM in ring-3.");
    391 # else
    392         EM_REG_COUNTER_USED(&pStats->StatIn,                     "/EM/CPU%d/R3/PrivInst/In",                 "Number of in instructions.");
    393         EM_REG_COUNTER_USED(&pStats->StatOut,                    "/EM/CPU%d/R3/PrivInst/Out",                "Number of out instructions.");
    394 # endif
    395390        EM_REG_COUNTER_USED(&pStats->StatCli,                    "/EM/CPU%d/R3/PrivInst/Cli",                "Number of cli instructions.");
    396391        EM_REG_COUNTER_USED(&pStats->StatSti,                    "/EM/CPU%d/R3/PrivInst/Sti",                "Number of sli instructions.");
     
    13661361         *       turns off monitoring features essential for raw mode!
    13671362         */
    1368 #ifdef VBOX_WITH_FIRST_IEM_STEP
    13691363        return EMSTATE_IEM_THEN_REM;
    1370 #else
    1371         return EMSTATE_REM;
    1372 #endif
    13731364    }
    13741365
     
    22152206                 */
    22162207                case VINF_EM_RESCHEDULE_REM:
    2217 #ifdef VBOX_WITH_FIRST_IEM_STEP
    22182208                    Assert(!pVM->em.s.fIemExecutesAll || pVCpu->em.s.enmState != EMSTATE_IEM);
    22192209                    if (HMIsEnabled(pVM))
     
    22322222                        pVCpu->em.s.enmState = EMSTATE_REM;
    22332223                    }
    2234 #else
    2235                     Log2(("EMR3ExecuteVM: VINF_EM_RESCHEDULE_REM: %d -> %d (EMSTATE_REM)\n", enmOldState, EMSTATE_REM));
    2236                     Assert(!pVM->em.s.fIemExecutesAll || pVCpu->em.s.enmState != EMSTATE_IEM);
    2237                     pVCpu->em.s.enmState = EMSTATE_REM;
    2238 #endif
    22392224                    break;
    22402225
  • trunk/src/VBox/VMM/VMMR3/EMHM.cpp

    r47807 r56064  
    193193     * Once IEM gets mature enough, nothing should ever fall back.
    194194     */
    195 #if defined(VBOX_WITH_FIRST_IEM_STEP) || !defined(VBOX_WITH_REM)
    196195    STAM_PROFILE_START(&pVCpu->em.s.StatIEMEmu, a);
    197196    rc = VBOXSTRICTRC_TODO(IEMExecOne(pVCpu));
     
    200199    if (   rc == VERR_IEM_ASPECT_NOT_IMPLEMENTED
    201200        || rc == VERR_IEM_INSTR_NOT_IMPLEMENTED)
    202 #endif
    203201    {
    204202#ifdef VBOX_WITH_REM
    205203        STAM_PROFILE_START(&pVCpu->em.s.StatREMEmu, b);
    206 # ifndef VBOX_WITH_FIRST_IEM_STEP
    207         Log(("EMINS[rem]: %04x:%RGv RSP=%RGv\n", pCtx->cs.Sel, (RTGCPTR)pCtx->rip, (RTGCPTR)pCtx->rsp));
    208 //# elif defined(DEBUG_bird)
    209 //        AssertFailed();
    210 # endif
    211204        EMRemLock(pVM);
    212205        /* Flush the recompiler TLB if the VCPU has changed. */
     
    277270                    RT_SUCCESS_NP(rcStrict) ? VERR_IPE_UNEXPECTED_INFO_STATUS : VBOXSTRICTRC_TODO(rcStrict));
    278271
    279 #ifdef VBOX_WITH_FIRST_IEM_STEP
    280272    /*
    281273     * Hand it over to the interpreter.
     
    286278    STAM_PROFILE_STOP(&pVCpu->em.s.StatIOEmu, a);
    287279    return VBOXSTRICTRC_TODO(rcStrict);
    288 
    289 #else
    290     /** @todo probably we should fall back to the recompiler; otherwise we'll go back and forth between HC & GC
    291      *   as io instructions tend to come in packages of more than one
    292      */
    293     DISCPUSTATE Cpu;
    294     int rc2 = CPUMR3DisasmInstrCPU(pVM, pVCpu, pCtx, pCtx->rip, &Cpu, "IO EMU");
    295     if (RT_SUCCESS(rc2))
    296     {
    297         rcStrict = VINF_EM_RAW_EMULATE_INSTR;
    298 
    299         if (!(Cpu.fPrefix & (DISPREFIX_REP | DISPREFIX_REPNE)))
    300         {
    301             switch (Cpu.pCurInstr->uOpcode)
    302             {
    303                 case OP_IN:
    304                 {
    305                     STAM_COUNTER_INC(&pVCpu->em.s.CTX_SUFF(pStats)->StatIn);
    306                     rcStrict = IOMInterpretIN(pVM, pVCpu, CPUMCTX2CORE(pCtx), &Cpu);
    307                     break;
    308                 }
    309 
    310                 case OP_OUT:
    311                 {
    312                     STAM_COUNTER_INC(&pVCpu->em.s.CTX_SUFF(pStats)->StatOut);
    313                     rcStrict = IOMInterpretOUT(pVM, pVCpu, CPUMCTX2CORE(pCtx), &Cpu);
    314                     break;
    315                 }
    316             }
    317         }
    318         else if (Cpu.fPrefix & DISPREFIX_REP)
    319         {
    320             switch (Cpu.pCurInstr->uOpcode)
    321             {
    322                 case OP_INSB:
    323                 case OP_INSWD:
    324                 {
    325                     STAM_COUNTER_INC(&pVCpu->em.s.CTX_SUFF(pStats)->StatIn);
    326                     rcStrict = IOMInterpretINS(pVM, pVCpu, CPUMCTX2CORE(pCtx), &Cpu);
    327                     break;
    328                 }
    329 
    330                 case OP_OUTSB:
    331                 case OP_OUTSWD:
    332                 {
    333                     STAM_COUNTER_INC(&pVCpu->em.s.CTX_SUFF(pStats)->StatOut);
    334                     rcStrict = IOMInterpretOUTS(pVM, pVCpu, CPUMCTX2CORE(pCtx), &Cpu);
    335                     break;
    336                 }
    337             }
    338         }
    339 
    340         /*
    341          * Handled the I/O return codes.
    342          * (The unhandled cases end up with rcStrict == VINF_EM_RAW_EMULATE_INSTR.)
    343          */
    344         if (IOM_SUCCESS(rcStrict))
    345         {
    346             pCtx->rip += Cpu.cbInstr;
    347             STAM_PROFILE_STOP(&pVCpu->em.s.StatIOEmu, a);
    348             LogFlow(("emR3HmExecuteIOInstruction: %Rrc 1\n", VBOXSTRICTRC_VAL(rcStrict)));
    349             return VBOXSTRICTRC_TODO(rcStrict);
    350         }
    351 
    352         if (rcStrict == VINF_EM_RAW_GUEST_TRAP)
    353         {
    354             /* The active trap will be dispatched. */
    355             Assert(TRPMHasTrap(pVCpu));
    356             STAM_PROFILE_STOP(&pVCpu->em.s.StatIOEmu, a);
    357             LogFlow(("emR3HmExecuteIOInstruction: VINF_SUCCESS 2\n"));
    358             return VINF_SUCCESS;
    359         }
    360         AssertMsg(rcStrict != VINF_TRPM_XCPT_DISPATCHED, ("Handle VINF_TRPM_XCPT_DISPATCHED\n"));
    361 
    362         if (RT_FAILURE(rcStrict))
    363         {
    364             STAM_PROFILE_STOP(&pVCpu->em.s.StatIOEmu, a);
    365             LogFlow(("emR3HmExecuteIOInstruction: %Rrc 3\n", VBOXSTRICTRC_VAL(rcStrict)));
    366             return VBOXSTRICTRC_TODO(rcStrict);
    367         }
    368         AssertMsg(rcStrict == VINF_EM_RAW_EMULATE_INSTR || rcStrict == VINF_EM_RESCHEDULE_REM, ("rcStrict=%Rrc\n", VBOXSTRICTRC_VAL(rcStrict)));
    369     }
    370 
    371     STAM_PROFILE_STOP(&pVCpu->em.s.StatIOEmu, a);
    372     int rc3 = emR3HmExecuteInstruction(pVM, pVCpu, "IO: ");
    373     LogFlow(("emR3HmExecuteIOInstruction: %Rrc 4 (rc2=%Rrc, rc3=%Rrc)\n", VBOXSTRICTRC_VAL(rcStrict), rc2, rc3));
    374     return rc3;
    375 #endif
    376280}
    377281
  • trunk/src/VBox/VMM/VMMR3/EMRaw.cpp

    r55980 r56064  
    365365     * Once IEM gets mature enough, nothing should ever fall back.
    366366     */
    367 #ifdef VBOX_WITH_FIRST_IEM_STEP
    368 //# define VBOX_WITH_FIRST_IEM_STEP_B
    369 #endif
     367//#define VBOX_WITH_FIRST_IEM_STEP_B
    370368#if defined(VBOX_WITH_FIRST_IEM_STEP_B) || !defined(VBOX_WITH_REM)
    371369    Log(("EMINS: %04x:%RGv RSP=%RGv\n", pCtx->cs.Sel, (RTGCPTR)pCtx->rip, (RTGCPTR)pCtx->rsp));
     
    439437static int emR3RawExecuteIOInstruction(PVM pVM, PVMCPU pVCpu)
    440438{
    441 #ifdef VBOX_WITH_FIRST_IEM_STEP
    442439    STAM_PROFILE_START(&pVCpu->em.s.StatIOEmu, a);
    443440
     
    448445    STAM_PROFILE_STOP(&pVCpu->em.s.StatIOEmu, a);
    449446    return VBOXSTRICTRC_TODO(rcStrict);
    450 
    451 #else
    452     PCPUMCTX pCtx = pVCpu->em.s.pCtx;
    453 
    454     STAM_PROFILE_START(&pVCpu->em.s.StatIOEmu, a);
    455 
    456     /** @todo probably we should fall back to the recompiler; otherwise we'll go back and forth between HC & GC
    457      *   as io instructions tend to come in packages of more than one
    458      */
    459     DISCPUSTATE Cpu;
    460     int rc = CPUMR3DisasmInstrCPU(pVM, pVCpu, pCtx, pCtx->rip, &Cpu, "IO EMU");
    461     if (RT_SUCCESS(rc))
    462     {
    463         VBOXSTRICTRC rcStrict = VINF_EM_RAW_EMULATE_INSTR;
    464 
    465         if (!(Cpu.fPrefix & (DISPREFIX_REP | DISPREFIX_REPNE)))
    466         {
    467             switch (Cpu.pCurInstr->uOpcode)
    468             {
    469                 case OP_IN:
    470                 {
    471                     STAM_COUNTER_INC(&pVCpu->em.s.CTX_SUFF(pStats)->StatIn);
    472                     rcStrict = IOMInterpretIN(pVM, pVCpu, CPUMCTX2CORE(pCtx), &Cpu);
    473                     break;
    474                 }
    475 
    476                 case OP_OUT:
    477                 {
    478                     STAM_COUNTER_INC(&pVCpu->em.s.CTX_SUFF(pStats)->StatOut);
    479                     rcStrict = IOMInterpretOUT(pVM, pVCpu, CPUMCTX2CORE(pCtx), &Cpu);
    480                     break;
    481                 }
    482             }
    483         }
    484         else if (Cpu.fPrefix & DISPREFIX_REP)
    485         {
    486             switch (Cpu.pCurInstr->uOpcode)
    487             {
    488                 case OP_INSB:
    489                 case OP_INSWD:
    490                 {
    491                     STAM_COUNTER_INC(&pVCpu->em.s.CTX_SUFF(pStats)->StatIn);
    492                     rcStrict = IOMInterpretINS(pVM, pVCpu, CPUMCTX2CORE(pCtx), &Cpu);
    493                     break;
    494                 }
    495 
    496                 case OP_OUTSB:
    497                 case OP_OUTSWD:
    498                 {
    499                     STAM_COUNTER_INC(&pVCpu->em.s.CTX_SUFF(pStats)->StatOut);
    500                     rcStrict = IOMInterpretOUTS(pVM, pVCpu, CPUMCTX2CORE(pCtx), &Cpu);
    501                     break;
    502                 }
    503             }
    504         }
    505 
    506         /*
    507          * Handled the I/O return codes.
    508          * (The unhandled cases end up with rcStrict == VINF_EM_RAW_EMULATE_INSTR.)
    509          */
    510         if (IOM_SUCCESS(rcStrict))
    511         {
    512             pCtx->rip += Cpu.cbInstr;
    513             STAM_PROFILE_STOP(&pVCpu->em.s.StatIOEmu, a);
    514             return VBOXSTRICTRC_TODO(rcStrict);
    515         }
    516 
    517         if (rcStrict == VINF_EM_RAW_GUEST_TRAP)
    518         {
    519             STAM_PROFILE_STOP(&pVCpu->em.s.StatIOEmu, a);
    520             rcStrict = emR3RawGuestTrap(pVM, pVCpu);
    521             return VBOXSTRICTRC_TODO(rcStrict);
    522         }
    523         AssertMsg(rcStrict != VINF_TRPM_XCPT_DISPATCHED, ("Handle VINF_TRPM_XCPT_DISPATCHED\n"));
    524 
    525         if (RT_FAILURE(rcStrict))
    526         {
    527             STAM_PROFILE_STOP(&pVCpu->em.s.StatIOEmu, a);
    528             return VBOXSTRICTRC_TODO(rcStrict);
    529         }
    530         AssertMsg(rcStrict == VINF_EM_RAW_EMULATE_INSTR || rcStrict == VINF_EM_RESCHEDULE_REM, ("rcStrict=%Rrc\n", VBOXSTRICTRC_VAL(rcStrict)));
    531     }
    532     STAM_PROFILE_STOP(&pVCpu->em.s.StatIOEmu, a);
    533     return emR3RawExecuteInstruction(pVM, pVCpu, "IO: ");
    534 #endif
    535447}
    536448
  • trunk/src/VBox/VMM/include/EMHandleRCTmpl.h

    r56047 r56064  
    277277
    278278        case VINF_EM_RAW_INJECT_TRPM_EVENT:
    279 #ifdef VBOX_WITH_FIRST_IEM_STEP
    280279            rc = VBOXSTRICTRC_VAL(IEMInjectTrpmEvent(pVCpu));
    281280            /* The following condition should be removed when IEM_IMPLEMENTS_TASKSWITCH becomes true. */
    282281            if (rc == VERR_IEM_ASPECT_NOT_IMPLEMENTED)
    283282                rc = emR3ExecuteInstruction(pVM, pVCpu, "EVENT: ");
    284 #else
    285             /* Do the same thing as VINF_EM_RAW_EMULATE_INSTR. */
    286             rc = emR3ExecuteInstruction(pVM, pVCpu, "EVENT: ");
    287 #endif
    288283            break;
    289284
  • trunk/src/VBox/VMM/include/EMInternal.h

    r49070 r56064  
    267267     * @{ */
    268268    STAMCOUNTER             StatIoRestarted;
    269 #ifdef VBOX_WITH_FIRST_IEM_STEP
    270269    STAMCOUNTER             StatIoIem;
    271 #else
    272     STAMCOUNTER             StatIn;
    273     STAMCOUNTER             StatOut;
    274 #endif
    275270    STAMCOUNTER             StatCli;
    276271    STAMCOUNTER             StatSti;
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