Minor decoder optimizations, kernel fixes, cpu backend fixes
This commit is contained in:
@@ -425,6 +425,27 @@ typedef struct alignas(64) PPCContext_s {
|
||||
uint64_t reserved_val;
|
||||
ThreadState* thread_state;
|
||||
uint8_t* virtual_membase;
|
||||
|
||||
template <typename T = uint8_t*>
|
||||
inline T TranslateVirtual(uint32_t guest_address) XE_RESTRICT const {
|
||||
#if XE_PLATFORM_WIN32 == 1
|
||||
uint8_t* host_address = virtual_membase + guest_address;
|
||||
if (guest_address >= static_cast<uint32_t>(reinterpret_cast<uintptr_t>(this))) {
|
||||
host_address += 0x1000;
|
||||
}
|
||||
return reinterpret_cast<T>(host_address);
|
||||
#else
|
||||
return processor->memory()->TranslateVirtual<T>(guest_address);
|
||||
|
||||
#endif
|
||||
}
|
||||
//for convenience in kernel functions, version that auto narrows to uint32
|
||||
template <typename T = uint8_t*>
|
||||
inline T TranslateVirtualGPR(uint64_t guest_address) XE_RESTRICT const {
|
||||
return TranslateVirtual<T>(static_cast<uint32_t>(guest_address));
|
||||
|
||||
}
|
||||
|
||||
static std::string GetRegisterName(PPCRegister reg);
|
||||
std::string GetStringFromValue(PPCRegister reg) const;
|
||||
void SetValueFromString(PPCRegister reg, std::string value);
|
||||
|
||||
Reference in New Issue
Block a user