Changeset 14969 in vbox for trunk/src/recompiler_new
- Timestamp:
- Dec 4, 2008 10:57:17 AM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 40333
- Location:
- trunk/src/recompiler_new
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/recompiler_new/Makefile.kmk
r14834 r14969 70 70 # 71 71 $(REM_MOD)_DEFS = IN_REM_R3 REM_INCLUDE_CPU_H 72 $(REM_MOD)_DEFS += REM_PHYS_ADDR_IN_TLB72 #$(REM_MOD)_DEFS += REM_PHYS_ADDR_IN_TLB 73 73 $(REM_MOD)_DEFS += VBOX_WITH_NEW_RECOMPILER 74 74 #$(REM_MOD)_DEFS += DEBUG_ALL_LOGGING DEBUG_DISAS DEBUG_PCALL DEBUG_EXEC DEBUG_FLUSH DEBUG_IOPORT DEBUG_SIGNAL DEBUG_TLB_CHECK DEBUG_TB_INVALIDATE DEBUG_TLB # Enables huge amounts of debug logging. -
trunk/src/recompiler_new/VBoxREMWrapper.cpp
r14755 r14969 718 718 { REMPARMDESC_FLAGS_INT, sizeof(PRTR3PTR), NULL } 719 719 }; 720 static const REMPARMDESC g_aArgsPGMPhysGCPhys2R3PtrEx[] = 721 { 722 { REMPARMDESC_FLAGS_INT, sizeof(PVM), NULL }, 723 { REMPARMDESC_FLAGS_GCPHYS, sizeof(RTGCPHYS), NULL }, 724 { REMPARMDESC_FLAGS_GCPTR, sizeof(RTGCPHYS), NULL }, 725 { REMPARMDESC_FLAGS_INT, sizeof(uint32_t), NULL }, 726 { REMPARMDESC_FLAGS_INT, sizeof(PRTR3PTR), NULL } 727 }; 720 728 static const REMPARMDESC g_aArgsPGMPhysGCPtr2R3PtrByGstCR3[] = 721 729 { … … 804 812 { REMPARMDESC_FLAGS_INT, sizeof(void*), NULL }, 805 813 { REMPARMDESC_FLAGS_INT, sizeof(PRTGCPHYS), NULL } 806 };807 static const REMPARMDESC g_aArgsPGMHandlerIsAddressMonitored[] =808 {809 { REMPARMDESC_FLAGS_INT, sizeof(PVM), NULL },810 { REMPARMDESC_FLAGS_INT, sizeof(RTHCUINTPTR), NULL }811 814 }; 812 815 static const REMPARMDESC g_aArgsRTMemRealloc[] = … … 1149 1152 { "PGMR3PhysWriteU64", (void *)(uintptr_t)&PGMR3PhysWriteU64, &g_aArgsPGMR3PhysWriteU64[0], RT_ELEMENTS(g_aArgsPGMR3PhysWriteU32), REMFNDESC_FLAGS_RET_VOID, 0, NULL }, 1150 1153 { "PGMR3DbgR3Ptr2GCPhys", (void *)(uintptr_t)&PGMR3DbgR3Ptr2GCPhys, &g_aArgsPGMR3DbgR3Ptr2GCPhys[0], RT_ELEMENTS(g_aArgsPGMR3DbgR3Ptr2GCPhys), REMFNDESC_FLAGS_RET_INT, sizeof(uint64_t), NULL }, 1151 { "PGM HandlerIsAddressMonitored", (void *)(uintptr_t)&PGMHandlerIsAddressMonitored, &g_aArgsPGMHandlerIsAddressMonitored[0], RT_ELEMENTS(g_aArgsPGMHandlerIsAddressMonitored), REMFNDESC_FLAGS_RET_INT, sizeof(bool), NULL },1154 { "PGMPhysGCPhys2R3PtrEx", (void *)(uintptr_t)&PGMPhysGCPhys2R3PtrEx, &g_aArgsPGMPhysGCPhys2R3PtrEx[0], RT_ELEMENTS(g_aArgsPGMPhysGCPhys2R3PtrEx), REMFNDESC_FLAGS_RET_INT, sizeof(int), NULL }, 1152 1155 { "SSMR3GetGCPtr", (void *)(uintptr_t)&SSMR3GetGCPtr, &g_aArgsSSMR3GetGCPtr[0], RT_ELEMENTS(g_aArgsSSMR3GetGCPtr), REMFNDESC_FLAGS_RET_INT, sizeof(int), NULL }, 1153 1156 { "SSMR3GetMem", (void *)(uintptr_t)&SSMR3GetMem, &g_aArgsSSMR3GetMem[0], RT_ELEMENTS(g_aArgsSSMR3GetMem), REMFNDESC_FLAGS_RET_INT, sizeof(int), NULL }, -
trunk/src/recompiler_new/VBoxRecompiler.c
r14962 r14969 1390 1390 1391 1391 #ifndef REM_PHYS_ADDR_IN_TLB 1392 void* remR3GCPhys2HCVirt(CPUState *env1, target_ulong physAddr )1392 void* remR3GCPhys2HCVirt(CPUState *env1, target_ulong physAddr, target_ulong virtAddr) 1393 1393 { 1394 1394 void* rv = NULL; 1395 1395 int rc; 1396 1397 rc = PGMPhysGCPhys2R3Ptr(env1->pVM, (RTGCPHYS)physAddr, 1, &rv); 1396 uint32_t flags = PGMPHYS_TRANSLATION_FLAG_CHECK_PHYS_MONITORED; 1397 1398 if (virtAddr != (target_ulong)-1) 1399 flags |= PGMPHYS_TRANSLATION_FLAG_CHECK_VIRT_MONITORED; 1400 1401 rc = PGMPhysGCPhys2R3PtrEx(env1->pVM, (RTGCPHYS)physAddr, (RTGCPTR)virtAddr, 1402 flags, &rv); 1403 1404 if (rc == VERR_PGM_PHYS_PAGE_RESERVED) 1405 { 1406 return (void*)-1; 1407 } 1398 1408 Assert (RT_SUCCESS(rc)); 1399 1409 … … 1450 1460 #endif 1451 1461 } 1452 1453 #ifndef REM_PHYS_ADDR_IN_TLB1454 bool remR3IsMonitored(CPUState *env, RTGCPTR GCPtr)1455 {1456 return PGMHandlerIsAddressMonitored(env->pVM, GCPtr);1457 }1458 #endif1459 1462 1460 1463 /** -
trunk/src/recompiler_new/cpu-all.h
r14962 r14969 272 272 #ifndef REM_PHYS_ADDR_IN_TLB 273 273 target_ulong remR3HCVirt2GCPhys(CPUState *env1, void *addr); 274 void* remR3GCPhys2HCVirt(CPUState *env1, target_ulong physAddr );274 void* remR3GCPhys2HCVirt(CPUState *env1, target_ulong physAddr, target_ulong virtAddr); 275 275 #endif 276 276 -
trunk/src/recompiler_new/exec-all.h
r14742 r14969 385 385 # if !defined(REM_PHYS_ADDR_IN_TLB) 386 386 target_ulong remR3HCVirt2GCPhys(CPUState *env1, void *addr); 387 #if 0388 bool remR3IsVAMonitored(CPUState *env, RTGCPTR GCPtr);389 bool remR3IsPAMonitored(CPUState *env, RTGCPHYS GCPhys);390 #else391 bool remR3IsMonitored(CPUState *env, RTGCPTR GCPtr);392 #endif393 387 # endif 394 388 # endif -
trunk/src/recompiler_new/exec.c
r14346 r14969 2022 2022 start1 = start + (unsigned long)phys_ram_base; 2023 2023 #else 2024 start1 = (unsigned long)remR3GCPhys2HCVirt(first_cpu, start );2024 start1 = (unsigned long)remR3GCPhys2HCVirt(first_cpu, start, -1); 2025 2025 #endif 2026 2026 for(env = first_cpu; env != NULL; env = env->next_cpu) { … … 2171 2171 addend = (unsigned long)phys_ram_base + (pd & TARGET_PAGE_MASK); 2172 2172 #else 2173 addend = (unsigned long)remR3GCPhys2HCVirt(env, pd & TARGET_PAGE_MASK); 2173 addend = (unsigned long)remR3GCPhys2HCVirt(env, 2174 pd & TARGET_PAGE_MASK, 2175 vaddr & TARGET_PAGE_MASK); 2174 2176 #endif 2175 2177 if ((pd & ~TARGET_PAGE_MASK) <= IO_MEM_ROM) { … … 2204 2206 #ifdef VBOX 2205 2207 # if !defined(REM_PHYS_ADDR_IN_TLB) 2206 if ( remR3IsMonitored(env, vaddr & TARGET_PAGE_MASK))2208 if (addend == (target_phys_addr_t)-1) 2207 2209 { 2208 2210 address |= TLB_MMIO;
Note:
See TracChangeset
for help on using the changeset viewer.