Browse Source

[jit] restore support for 16KB systems

Signed-off-by: lizzie <lizzie@eden-emu.dev>
lizzie/macos-fix
lizzie 2 weeks ago
parent
commit
46118baf36
  1. 13
      src/core/arm/dynarmic/arm_dynarmic_32.cpp
  2. 14
      src/core/arm/dynarmic/arm_dynarmic_64.cpp
  3. 18
      src/core/hle/service/jit/jit_context.cpp

13
src/core/arm/dynarmic/arm_dynarmic_32.cpp

@ -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) {

14
src/core/arm/dynarmic/arm_dynarmic_64.cpp

@ -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) {

18
src/core/hle/service/jit/jit_context.cpp

@ -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);
}

Loading…
Cancel
Save