[jit] restore support for 16KB systems

Signed-off-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
lizzie 2026-02-17 08:01:22 +00:00
parent 50ec0892c6
commit 46118baf36
3 changed files with 23 additions and 22 deletions

View file

@ -42,12 +42,13 @@ u64 DynarmicCallbacks32::MemoryRead64(u32 vaddr) {
std::optional<u32> DynarmicCallbacks32::MemoryReadCode(u32 vaddr) {
if (!m_memory.IsValidVirtualAddressRange(vaddr, sizeof(u32)))
return std::nullopt;
auto const aligned_vaddr = vaddr & ~Core::Memory::YUZU_PAGEMASK;
if (last_code_addr != aligned_vaddr) {
m_memory.ReadBlock(aligned_vaddr, &cached_code_page, sizeof(cached_code_page));
last_code_addr = aligned_vaddr;
}
return cached_code_page.inst[(vaddr & Core::Memory::YUZU_PAGEMASK) / sizeof(u32)];
return m_memory.Read32(vaddr);
// auto const aligned_vaddr = vaddr & ~Core::Memory::YUZU_PAGEMASK;
// if (last_code_addr != aligned_vaddr) {
// m_memory.ReadBlock(aligned_vaddr, &cached_code_page, sizeof(cached_code_page));
// last_code_addr = aligned_vaddr;
// }
// return cached_code_page.inst[(vaddr & Core::Memory::YUZU_PAGEMASK) / sizeof(u32)];
}
void DynarmicCallbacks32::MemoryWrite8(u32 vaddr, u8 value) {

View file

@ -45,13 +45,13 @@ Dynarmic::A64::Vector DynarmicCallbacks64::MemoryRead128(u64 vaddr) {
std::optional<u32> DynarmicCallbacks64::MemoryReadCode(u64 vaddr) {
if (!m_memory.IsValidVirtualAddressRange(vaddr, sizeof(u32)))
return std::nullopt;
// return m_memory.Read32(vaddr);
auto const aligned_vaddr = vaddr & ~Core::Memory::YUZU_PAGEMASK;
if (last_code_addr != aligned_vaddr) {
m_memory.ReadBlock(aligned_vaddr, &cached_code_page, sizeof(cached_code_page));
last_code_addr = aligned_vaddr;
}
return cached_code_page.inst[(vaddr & Core::Memory::YUZU_PAGEMASK) / sizeof(u32)];
return m_memory.Read32(vaddr);
// auto const aligned_vaddr = vaddr & ~Core::Memory::YUZU_PAGEMASK;
// if (last_code_addr != aligned_vaddr) {
// m_memory.ReadBlock(aligned_vaddr, &cached_code_page, sizeof(cached_code_page));
// last_code_addr = aligned_vaddr;
// }
// return cached_code_page.inst[(vaddr & Core::Memory::YUZU_PAGEMASK) / sizeof(u32)];
}
void DynarmicCallbacks64::MemoryWrite8(u64 vaddr, u8 value) {

View file

@ -47,15 +47,15 @@ public:
: memory{memory_}, local_memory{local_memory_},
mapped_ranges{mapped_ranges_}, parent{parent_} {}
std::optional<std::uint32_t> MemoryReadCode(VAddr vaddr) override {
static_assert(Core::Memory::YUZU_PAGESIZE == Dynarmic::CODE_PAGE_SIZE);
auto const aligned_vaddr = vaddr & ~Core::Memory::YUZU_PAGEMASK;
if (last_code_addr != aligned_vaddr) {
cached_code_page = ReadMemory<Dynarmic::CodePage>(aligned_vaddr);
last_code_addr = aligned_vaddr;
}
return cached_code_page.inst[(vaddr & Core::Memory::YUZU_PAGEMASK) / sizeof(u32)];
}
// std::optional<std::uint32_t> MemoryReadCode(VAddr vaddr) override {
// static_assert(Core::Memory::YUZU_PAGESIZE == Dynarmic::CODE_PAGE_SIZE);
// auto const aligned_vaddr = vaddr & ~Core::Memory::YUZU_PAGEMASK;
// if (last_code_addr != aligned_vaddr) {
// cached_code_page = ReadMemory<Dynarmic::CodePage>(aligned_vaddr);
// last_code_addr = aligned_vaddr;
// }
// return cached_code_page.inst[(vaddr & Core::Memory::YUZU_PAGEMASK) / sizeof(u32)];
// }
u8 MemoryRead8(u64 vaddr) override {
return ReadMemory<u8>(vaddr);
}