MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / vtlb_BackpatchLoadStore

Function vtlb_BackpatchLoadStore

pcsx2/vtlb.cpp:1115–1139  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1113}
1114
1115bool vtlb_BackpatchLoadStore(uptr code_address, uptr fault_address)
1116{
1117 uptr fastmem_start = (uptr)vtlbdata.fastmem_base;
1118 uptr fastmem_end = fastmem_start + 0xFFFFFFFFu;
1119 if (fault_address < fastmem_start || fault_address > fastmem_end)
1120 return false;
1121
1122 auto iter = s_fastmem_backpatch_info.find(code_address);
1123 if (iter == s_fastmem_backpatch_info.end())
1124 return false;
1125
1126 const LoadstoreBackpatchInfo& info = iter->second;
1127 const u32 guest_addr = static_cast<u32>(fault_address - fastmem_start);
1128 vtlb_DynBackpatchLoadStore(code_address, info.code_size, info.guest_pc, guest_addr,
1129 info.gpr_bitmask, info.fpr_bitmask, info.address_register, info.data_register,
1130 info.size_in_bits, info.is_signed, info.is_load, info.is_fpr);
1131
1132 // queue block for recompilation later
1133 Cpu->Clear(info.guest_pc, 1);
1134
1135 // and store the pc in the faulting list, so that we don't emit another fastmem loadstore
1136 s_fastmem_faulting_pcs.insert(info.guest_pc);
1137 s_fastmem_backpatch_info.erase(iter);
1138 return true;
1139}
1140
1141bool vtlb_IsFaultingPC(u32 guest_pc)
1142{

Callers 1

HandlePageFaultMethod · 0.85

Calls 6

findMethod · 0.45
endMethod · 0.45
ClearMethod · 0.45
insertMethod · 0.45
eraseMethod · 0.45

Tested by

no test coverage detected