Changeset 2505 in vbox
- Timestamp:
- May 4, 2007 6:20:07 PM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 20936
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/EM.cpp
r2232 r2505 965 965 } 966 966 967 968 #ifdef DEBUG 969 967 970 /** 968 971 * Steps hardware accelerated mode. … … 1019 1022 } 1020 1023 1021 #ifdef DEBUG 1024 1022 1025 void emR3SingleStepExecRaw(PVM pVM, uint32_t cIterations) 1023 1026 { 1024 1027 EMSTATE enmOldState = pVM->em.s.enmState; 1025 PCPUMCTX pCtx = pVM->em.s.pCtx;1026 1028 1027 1029 pVM->em.s.enmState = EMSTATE_DEBUG_GUEST_RAW; … … 1039 1041 } 1040 1042 1043 1041 1044 void emR3SingleStepExecHwAcc(PVM pVM, uint32_t cIterations) 1042 1045 { 1043 1046 EMSTATE enmOldState = pVM->em.s.enmState; 1044 PCPUMCTX pCtx = pVM->em.s.pCtx;1045 1047 1046 1048 pVM->em.s.enmState = EMSTATE_DEBUG_GUEST_HWACC; … … 1058 1060 } 1059 1061 1062 1060 1063 void emR3SingleStepExecRem(PVM pVM, uint32_t cIterations) 1061 1064 { 1062 1065 EMSTATE enmOldState = pVM->em.s.enmState; 1063 PCPUMCTX pCtx = pVM->em.s.pCtx;1064 1066 1065 1067 pVM->em.s.enmState = EMSTATE_DEBUG_GUEST_REM; … … 1076 1078 pVM->em.s.enmState = enmOldState; 1077 1079 } 1078 #endif 1080 1081 #endif /* DEBUG */ 1082 1079 1083 1080 1084 /** … … 1270 1274 if (VBOX_SUCCESS(rc)) 1271 1275 { 1276 rc = VINF_EM_RESCHEDULE_REM; 1277 1272 1278 if (!(Cpu.prefix & (PREFIX_REP | PREFIX_REPNE))) 1273 1279 { … … 1277 1283 { 1278 1284 STAM_COUNTER_INC(&pVM->em.s.CTXSUFF(pStats)->StatIn); 1279 1280 1285 rc = IOMInterpretIN(pVM, CPUMCTX2CORE(pCtx), &Cpu); 1281 if (rc == VINF_SUCCESS)1282 {1283 pCtx->eip += Cpu.opsize;1284 STAM_PROFILE_STOP(&pVM->em.s.StatIOEmu, a);1285 return VINF_SUCCESS;1286 }1287 else1288 if (rc == VINF_EM_RAW_GUEST_TRAP)1289 {1290 STAM_PROFILE_STOP(&pVM->em.s.StatIOEmu, a);1291 rc = emR3RawGuestTrap(pVM);1292 return rc;1293 }1294 /* emulate in the recompiler */1295 1286 break; 1296 1287 } … … 1299 1290 { 1300 1291 STAM_COUNTER_INC(&pVM->em.s.CTXSUFF(pStats)->StatOut); 1301 1302 1292 rc = IOMInterpretOUT(pVM, CPUMCTX2CORE(pCtx), &Cpu); 1303 if (rc == VINF_SUCCESS)1304 {1305 pCtx->eip += Cpu.opsize;1306 STAM_PROFILE_STOP(&pVM->em.s.StatIOEmu, a);1307 return VINF_SUCCESS;1308 }1309 else1310 if (rc == VINF_EM_RAW_GUEST_TRAP)1311 {1312 STAM_PROFILE_STOP(&pVM->em.s.StatIOEmu, a);1313 rc = emR3RawGuestTrap(pVM);1314 return rc;1315 }1316 /* emulate in the recompiler */1317 1293 break; 1318 1294 } 1319 1320 default:1321 break;1322 1295 } 1323 } //if(!(Cpu.prefix & (PREFIX_REP|PREFIX_REPNE))1296 } 1324 1297 else if (Cpu.prefix & PREFIX_REP) 1325 1298 { … … 1331 1304 STAM_COUNTER_INC(&pVM->em.s.CTXSUFF(pStats)->StatIn); 1332 1305 rc = IOMInterpretINS(pVM, CPUMCTX2CORE(pCtx), &Cpu); 1333 if (rc == VINF_SUCCESS)1334 {1335 STAM_PROFILE_STOP(&pVM->em.s.StatIOEmu, a);1336 pCtx->eip += Cpu.opsize;1337 return rc;1338 }1339 else1340 if (rc == VINF_EM_RAW_GUEST_TRAP)1341 {1342 STAM_PROFILE_STOP(&pVM->em.s.StatIOEmu, a);1343 rc = emR3RawGuestTrap(pVM);1344 return rc;1345 }1346 /* emulate in the recompiler */1347 1306 break; 1348 1307 } 1308 1349 1309 case OP_OUTSB: 1350 1310 case OP_OUTSWD: … … 1352 1312 STAM_COUNTER_INC(&pVM->em.s.CTXSUFF(pStats)->StatOut); 1353 1313 rc = IOMInterpretOUTS(pVM, CPUMCTX2CORE(pCtx), &Cpu); 1354 if (rc == VINF_SUCCESS)1355 {1356 STAM_PROFILE_STOP(&pVM->em.s.StatIOEmu, a);1357 pCtx->eip += Cpu.opsize;1358 return rc;1359 }1360 else1361 if (rc == VINF_EM_RAW_GUEST_TRAP)1362 {1363 STAM_PROFILE_STOP(&pVM->em.s.StatIOEmu, a);1364 rc = emR3RawGuestTrap(pVM);1365 return rc;1366 }1367 /* emulate in the recompiler */1368 1314 break; 1369 1315 } 1370 1316 } 1371 }//if(Cpu.prefix & PREFIX_REP) 1317 } 1318 1319 /* 1320 * Handled the I/O return codes. 1321 * (The unhandled cases ends up with rc == VINF_EM_RESCHEDULE_REM.) 1322 */ 1323 if ( rc == VINF_SUCCESS 1324 || (rc >= VINF_EM_FIRST && rc <= VINF_EM_LAST)) 1325 { 1326 pCtx->eip += Cpu.opsize; 1327 STAM_PROFILE_STOP(&pVM->em.s.StatIOEmu, a); 1328 return rc; 1329 } 1330 if (rc == VINF_EM_RAW_GUEST_TRAP) 1331 { 1332 STAM_PROFILE_STOP(&pVM->em.s.StatIOEmu, a); 1333 rc = emR3RawGuestTrap(pVM); 1334 return rc; 1335 } 1336 AssertMsg(rc != VINF_TRPM_XCPT_DISPATCHED, ("Handle VINF_TRPM_XCPT_DISPATCHED\n")); 1337 if (VBOX_FAILURE(rc)) 1338 { 1339 STAM_PROFILE_STOP(&pVM->em.s.StatIOEmu, a); 1340 return rc; 1341 } 1342 AssertMsg(rc == VINF_EM_RESCHEDULE_REM, ("rc=%Vrc\n", rc)); 1372 1343 } 1373 1344 … … 2196 2167 case VINF_IOM_HC_IOPORT_READ: 2197 2168 case VINF_IOM_HC_IOPORT_WRITE: 2198 case VINF_IOM_HC_IOPORT_READWRITE:2199 2169 rc = emR3RawExecuteIOInstruction(pVM); 2200 2170 break; … … 2525 2495 || rc == VINF_IOM_HC_IOPORT_READ 2526 2496 || rc == VINF_IOM_HC_IOPORT_WRITE 2527 || rc == VINF_IOM_HC_IOPORT_READWRITE2528 2497 //|| rc == VINF_PATM_PATCH_INT3 2529 2498 ) -
trunk/src/VBox/VMM/VMMAll/EMAll.cpp
r2136 r2505 47 47 #include <iprt/string.h> 48 48 49 49 50 /******************************************************************************* 50 51 * Structures and Typedefs * … … 54 55 typedef EMDECL(uint32_t) PFN_EMULATE_PARAM3(uint32_t *pu32Param1, uint32_t val2, size_t val3); 55 56 57 56 58 /******************************************************************************* 57 * Internal Functions * 58 *******************************************************************************/ 59 59 * Internal Functions * 60 *******************************************************************************/ 60 61 DECLINLINE(int) emInterpretInstructionCPU(PVM pVM, PDISCPUSTATE pCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize); 62 61 63 62 64 /** … … 271 273 #ifdef IN_GC 272 274 int rc = IOMGCIOPortHandler(pVM, pCtxCore, pCpu); 273 if (rc == VINF_SUCCESS) 275 if ( rc == VINF_SUCCESS 276 || (rc >= VINF_EM_FIRST && rc <= VINF_EM_LAST)) 274 277 pCtxCore->eip += cbOp; 275 278 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.